@shepai/cli 1.116.0-pr367.8e10c48 → 1.116.1
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/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +14 -0
- package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/index.d.ts +0 -2
- package/dist/packages/core/src/application/ports/output/services/index.d.ts.map +1 -1
- package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts +2 -1
- package/dist/packages/core/src/application/ports/output/services/worktree-service.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/cleanup-feature-worktree.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/cleanup-feature-worktree.use-case.js +6 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +3 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +30 -2
- package/dist/packages/core/src/application/use-cases/features/delete-feature.use-case.js +1 -1
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +4 -20
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/claude-code-executor.service.js +6 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts +12 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.js +98 -26
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/gemini-cli-executor.service.js +13 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-graph.js +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +18 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/evidence.node.js +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.js +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/implement.node.js +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/ci-watch-fix-loop.js +13 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts +4 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +9 -17
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +2 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +8 -4
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.js +7 -4
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/repair.node.js +1 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/validate.node.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/validate.node.js +1 -0
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +71 -1
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/git/worktree.service.js +5 -3
- package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/ide-launchers/compute-worktree-path.js +3 -1
- package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/ide-launchers/json-driven-ide-launcher.service.js +5 -1
- package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/pr-sync/pr-sync-watcher.service.js +12 -0
- package/dist/src/presentation/cli/commands/ui.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/ui.command.js +0 -15
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
- package/dist/src/presentation/web/dev-server.js +0 -20
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +1 -5
- package/web/.next/build-manifest.json +6 -6
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +2 -2
- package/web/.next/required-server-files.json +2 -2
- package/web/.next/routes-manifest.json +0 -24
- package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +20 -20
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +20 -20
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +4 -4
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
- package/web/.next/server/app/_global-error.html +2 -2
- 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/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.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/build-manifest.json +4 -4
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/build-manifest.json +4 -4
- package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/build-manifest.json +4 -4
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/build-manifest.json +4 -4
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/build-manifest.json +4 -4
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +1 -5
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{node_modules__pnpm_747b43ac._.js → _1bb131c4._.js} +2 -2
- package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_273d4632._.js +3 -0
- package/web/.next/server/chunks/ssr/_273d4632._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_6d26a08f._.js +3 -0
- package/web/.next/server/chunks/ssr/_6d26a08f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_8e762bfa._.js +3 -0
- package/web/.next/server/chunks/ssr/{_28862ed0._.js.map → _8e762bfa._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_383572e0._.js → _9f6e3d20._.js} +2 -2
- package/web/.next/server/chunks/ssr/_9f6e3d20._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_a68d7e1c._.js +9 -0
- package/web/.next/server/chunks/ssr/_a68d7e1c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_b5fc318a._.js +3 -0
- package/web/.next/server/chunks/ssr/_b5fc318a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_c1fbab88._.js +3 -0
- package/web/.next/server/chunks/ssr/_c1fbab88._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f4d222d6._.js +1 -1
- package/web/.next/server/chunks/ssr/_f5316e67._.js +3 -0
- package/web/.next/server/chunks/ssr/_f5316e67._.js.map +1 -0
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +4 -4
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +32 -54
- package/web/.next/static/chunks/17fd217453792496.js +11 -0
- package/web/.next/static/chunks/303a1217006489b9.js +1 -0
- package/web/.next/static/chunks/33479aee057faf05.js +1 -0
- package/web/.next/static/chunks/{c6dc0749ac370da4.js → 3375766cc7dda1d8.js} +2 -2
- package/web/.next/static/chunks/{f60771797b58531f.js → 35bf7817ea1c468d.js} +1 -1
- package/web/.next/static/chunks/3a806cf059241bc9.js +1 -0
- package/web/.next/static/chunks/{604d36c352fff6c0.js → 3c962e81416806a3.js} +2 -2
- package/web/.next/static/chunks/3fc8dae693118412.js +1 -0
- package/web/.next/static/chunks/57b45edf86522369.css +1 -0
- package/web/.next/static/chunks/5d83ac35ca137033.js +1 -0
- package/web/.next/static/chunks/619af41a8d3232e5.js +1 -0
- package/web/.next/static/chunks/{98e3a7cf58fc912a.js → 672e3da3ad26005b.js} +1 -1
- package/web/.next/static/chunks/{e510518c9ca6e844.js → 814f40e65ab8e09e.js} +1 -1
- package/web/.next/static/chunks/84a181ff3270fd9f.js +1 -0
- package/web/.next/static/chunks/b1f3c0e8e9872ef8.js +1 -0
- package/web/.next/static/chunks/{51ca7e4cad588da4.js → b5357e9cc8668be7.js} +1 -1
- package/web/.next/static/chunks/{385710675a1d06c9.js → b830ce63d018922d.js} +1 -1
- package/web/.next/static/chunks/ed3a602003bcb31b.js +1 -0
- package/web/.next/static/chunks/fcde0cbb2976b933.js +1 -0
- package/web/.next/static/chunks/{turbopack-b1685b5f87ad1d60.js → turbopack-426d9bc2450816ba.js} +1 -1
- package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.d.ts +0 -41
- package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.d.ts.map +0 -1
- package/dist/packages/core/src/application/ports/output/services/tunnel-service.interface.js +0 -14
- package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.d.ts +0 -65
- package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.d.ts.map +0 -1
- package/dist/packages/core/src/application/ports/output/services/webhook-service.interface.js +0 -10
- package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.d.ts +0 -36
- package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/tunnel/cloudflare-tunnel.service.js +0 -148
- package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.d.ts +0 -75
- package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/webhook/github-webhook.service.js +0 -372
- package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.d.ts +0 -82
- package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.d.ts.map +0 -1
- package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.js +0 -192
- package/dist/src/presentation/web/app/actions/load-webhook-status.d.ts +0 -3
- package/dist/src/presentation/web/app/actions/load-webhook-status.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/load-webhook-status.js +0 -19
- package/dist/src/presentation/web/app/api/webhooks/deliveries/route.d.ts +0 -9
- package/dist/src/presentation/web/app/api/webhooks/deliveries/route.d.ts.map +0 -1
- package/dist/src/presentation/web/app/api/webhooks/deliveries/route.js +0 -27
- package/dist/src/presentation/web/app/api/webhooks/github/route.d.ts +0 -17
- package/dist/src/presentation/web/app/api/webhooks/github/route.d.ts.map +0 -1
- package/dist/src/presentation/web/app/api/webhooks/github/route.js +0 -70
- package/dist/src/presentation/web/app/api/webhooks/status/route.d.ts +0 -9
- package/dist/src/presentation/web/app/api/webhooks/status/route.d.ts.map +0 -1
- package/dist/src/presentation/web/app/api/webhooks/status/route.js +0 -26
- package/dist/src/presentation/web/app/webhooks/page.d.ts +0 -4
- package/dist/src/presentation/web/app/webhooks/page.d.ts.map +0 -1
- package/dist/src/presentation/web/app/webhooks/page.js +0 -9
- package/dist/src/presentation/web/components/features/webhooks/types.d.ts +0 -32
- package/dist/src/presentation/web/components/features/webhooks/types.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/webhooks/types.js +0 -1
- package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.d.ts +0 -6
- package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.js +0 -38
- package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.d.ts +0 -9
- package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.js +0 -69
- package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.d.ts +0 -7
- package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.js +0 -11
- package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.d.ts +0 -9
- package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.js +0 -31
- package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.d.ts +0 -6
- package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.js +0 -21
- package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.d.ts +0 -9
- package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.js +0 -56
- package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.d.ts +0 -6
- package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.js +0 -39
- package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.d.ts +0 -8
- package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.js +0 -59
- package/web/.next/server/app/api/webhooks/deliveries/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/api/webhooks/deliveries/route/build-manifest.json +0 -11
- package/web/.next/server/app/api/webhooks/deliveries/route/server-reference-manifest.json +0 -4
- package/web/.next/server/app/api/webhooks/deliveries/route.js +0 -6
- package/web/.next/server/app/api/webhooks/deliveries/route.js.map +0 -5
- package/web/.next/server/app/api/webhooks/deliveries/route.js.nft.json +0 -1
- package/web/.next/server/app/api/webhooks/deliveries/route_client-reference-manifest.js +0 -2
- package/web/.next/server/app/api/webhooks/github/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/api/webhooks/github/route/build-manifest.json +0 -11
- package/web/.next/server/app/api/webhooks/github/route/server-reference-manifest.json +0 -4
- package/web/.next/server/app/api/webhooks/github/route.js +0 -6
- package/web/.next/server/app/api/webhooks/github/route.js.map +0 -5
- package/web/.next/server/app/api/webhooks/github/route.js.nft.json +0 -1
- package/web/.next/server/app/api/webhooks/github/route_client-reference-manifest.js +0 -2
- package/web/.next/server/app/api/webhooks/status/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/api/webhooks/status/route/build-manifest.json +0 -11
- package/web/.next/server/app/api/webhooks/status/route/server-reference-manifest.json +0 -4
- package/web/.next/server/app/api/webhooks/status/route.js +0 -6
- package/web/.next/server/app/api/webhooks/status/route.js.map +0 -5
- package/web/.next/server/app/api/webhooks/status/route.js.nft.json +0 -1
- package/web/.next/server/app/api/webhooks/status/route_client-reference-manifest.js +0 -2
- package/web/.next/server/app/webhooks/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/webhooks/page/build-manifest.json +0 -18
- package/web/.next/server/app/webhooks/page/next-font-manifest.json +0 -6
- package/web/.next/server/app/webhooks/page/react-loadable-manifest.json +0 -1
- package/web/.next/server/app/webhooks/page/server-reference-manifest.json +0 -35
- package/web/.next/server/app/webhooks/page.js +0 -16
- package/web/.next/server/app/webhooks/page.js.map +0 -5
- package/web/.next/server/app/webhooks/page.js.nft.json +0 -1
- package/web/.next/server/app/webhooks/page_client-reference-manifest.js +0 -2
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_deliveries_route_actions_d9e34c8d.js +0 -3
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_deliveries_route_actions_d9e34c8d.js.map +0 -1
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_github_route_actions_1b0d0c38.js +0 -3
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_github_route_actions_1b0d0c38.js.map +0 -1
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_status_route_actions_1a0d86a1.js +0 -3
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_webhooks_status_route_actions_1a0d86a1.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__15e5d45c._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__15e5d45c._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__23be381e._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__23be381e._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__9fc760c0._.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__9fc760c0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_activity_22f9667f.js +0 -3
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_activity_22f9667f.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d847b7b._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d847b7b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__87a7ae30._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__87a7ae30._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__920dccd5._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__920dccd5._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a42f5a88._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a42f5a88._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_26b2c311._.js +0 -3
- package/web/.next/server/chunks/ssr/_26b2c311._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_27dd06aa._.js +0 -3
- package/web/.next/server/chunks/ssr/_27dd06aa._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_28862ed0._.js +0 -3
- package/web/.next/server/chunks/ssr/_383572e0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_809c53f6._.js +0 -9
- package/web/.next/server/chunks/ssr/_809c53f6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_9eea4c51._.js +0 -3
- package/web/.next/server/chunks/ssr/_9eea4c51._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_a4899a76._.js +0 -3
- package/web/.next/server/chunks/ssr/_a4899a76._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_b7eb93fc._.js +0 -4
- package/web/.next/server/chunks/ssr/_b7eb93fc._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_e0a01382._.js +0 -3
- package/web/.next/server/chunks/ssr/_e0a01382._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f8b36e2c._.js +0 -3
- package/web/.next/server/chunks/ssr/_f8b36e2c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_webhooks_webhooks-page-client_tsx_b2662ea3._.js +0 -3
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_webhooks_webhooks-page-client_tsx_b2662ea3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_747b43ac._.js.map +0 -1
- package/web/.next/static/chunks/06b948216df083c1.js +0 -1
- package/web/.next/static/chunks/2bdc11361b8f2602.js +0 -1
- package/web/.next/static/chunks/31f35710932542ef.js +0 -1
- package/web/.next/static/chunks/40b6bcf1a2de4a0f.js +0 -1
- package/web/.next/static/chunks/4714eb891fa4fd81.js +0 -1
- package/web/.next/static/chunks/523340641468b5f2.js +0 -1
- package/web/.next/static/chunks/5f6161ceb4263319.js +0 -1
- package/web/.next/static/chunks/9a7361e2365b2d8e.js +0 -1
- package/web/.next/static/chunks/9af45e885bd4ccef.js +0 -1
- package/web/.next/static/chunks/bbfb591f6aaa7255.css +0 -1
- package/web/.next/static/chunks/c7e793951b20a67f.js +0 -1
- package/web/.next/static/chunks/e9621b096a69e4e8.js +0 -11
- package/web/.next/static/chunks/f644140e21b75f61.js +0 -1
- /package/web/.next/static/{kQ3LD6zhRbOzb0MYK2n5b → oySSHprbXXpmQhRjypXRR}/_buildManifest.js +0 -0
- /package/web/.next/static/{kQ3LD6zhRbOzb0MYK2n5b → oySSHprbXXpmQhRjypXRR}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{kQ3LD6zhRbOzb0MYK2n5b → oySSHprbXXpmQhRjypXRR}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.ts","../../../../../../src/presentation/web/app/api/webhooks/status/route.ts","../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/dist/esm/build/templates/app-route.js"],"sourcesContent":["/**\n * Webhook Manager Service\n *\n * Orchestrates the Cloudflare Tunnel and GitHub Webhook lifecycle.\n * Follows the singleton pattern used by NotificationWatcherService\n * and PrSyncWatcherService.\n *\n * Lifecycle:\n * 1. Start Cloudflare Tunnel to get a public URL\n * 2. Register GitHub webhooks pointing to the tunnel URL\n * 3. Monitor for tunnel URL changes → update webhooks\n * 4. On shutdown → remove webhooks → stop tunnel\n *\n * The manager is optional — if cloudflared is not installed or webhook\n * registration fails, the system falls back to polling gracefully.\n */\n\nimport type { ITunnelService } from '../../../application/ports/output/services/tunnel-service.interface.js';\nimport type { IWebhookService } from '../../../application/ports/output/services/webhook-service.interface.js';\nimport type {\n RegisteredWebhook,\n WebhookDeliveryRecord,\n GitHubWebhookService,\n} from './github-webhook.service.js';\n\nexport interface WebhookSystemStatus {\n running: boolean;\n tunnel: {\n connected: boolean;\n publicUrl: string | null;\n };\n webhooks: {\n registered: readonly RegisteredWebhook[];\n totalDeliveries: number;\n successCount: number;\n errorCount: number;\n ignoredCount: number;\n };\n startedAt: string | null;\n}\n\nconst TAG = '[WebhookManager]';\n\nexport class WebhookManagerService {\n private readonly tunnelService: ITunnelService;\n private readonly webhookService: IWebhookService;\n private running = false;\n private startedAt: string | null = null;\n\n constructor(tunnelService: ITunnelService, webhookService: IWebhookService) {\n this.tunnelService = tunnelService;\n this.webhookService = webhookService;\n }\n\n /**\n * Start the tunnel and register webhooks.\n * Fails gracefully — logs warnings but does not throw.\n *\n * @param localPort - The local web server port to tunnel\n */\n async start(localPort: number): Promise<void> {\n if (this.running) return;\n\n try {\n // Step 1: Start the tunnel\n // eslint-disable-next-line no-console\n console.log(`${TAG} Starting Cloudflare Tunnel for port ${localPort}...`);\n const publicUrl = await this.tunnelService.start(localPort);\n\n // Step 2: Listen for URL changes\n this.tunnelService.onUrlChange(async (newUrl) => {\n // eslint-disable-next-line no-console\n console.log(`${TAG} Tunnel URL changed, updating webhooks...`);\n try {\n await this.webhookService.updateWebhookUrl(newUrl);\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n // eslint-disable-next-line no-console\n console.warn(`${TAG} Failed to update webhooks after URL change: ${msg}`);\n }\n });\n\n // Step 3: Register webhooks with external services\n await this.webhookService.registerWebhooks(publicUrl);\n\n this.running = true;\n this.startedAt = new Date().toISOString();\n // eslint-disable-next-line no-console\n console.log(`${TAG} Webhook system ready (tunnel: ${publicUrl})`);\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n // eslint-disable-next-line no-console\n console.warn(`${TAG} Failed to start webhook system (falling back to polling): ${msg}`);\n\n // Clean up partial state\n try {\n await this.tunnelService.stop();\n } catch {\n // Already stopped or never started\n }\n }\n }\n\n /**\n * Stop the webhook system — remove webhooks, then stop the tunnel.\n */\n async stop(): Promise<void> {\n if (!this.running) return;\n\n // eslint-disable-next-line no-console\n console.log(`${TAG} Shutting down webhook system...`);\n\n try {\n await this.webhookService.removeWebhooks();\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n // eslint-disable-next-line no-console\n console.warn(`${TAG} Failed to remove webhooks during shutdown: ${msg}`);\n }\n\n try {\n await this.tunnelService.stop();\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n // eslint-disable-next-line no-console\n console.warn(`${TAG} Failed to stop tunnel during shutdown: ${msg}`);\n }\n\n this.running = false;\n // eslint-disable-next-line no-console\n console.log(`${TAG} Webhook system stopped`);\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n getTunnelUrl(): string | null {\n return this.tunnelService.getPublicUrl();\n }\n\n getStatus(): WebhookSystemStatus {\n const ghService = this.webhookService as GitHubWebhookService;\n const deliveries =\n typeof ghService.getDeliveryHistory === 'function' ? ghService.getDeliveryHistory() : [];\n\n const registered =\n typeof ghService.getRegisteredWebhooks === 'function'\n ? ghService.getRegisteredWebhooks()\n : [];\n\n let successCount = 0;\n let errorCount = 0;\n let ignoredCount = 0;\n for (const d of deliveries) {\n if (d.status === 'success') successCount++;\n else if (d.status === 'error') errorCount++;\n else ignoredCount++;\n }\n\n return {\n running: this.running,\n tunnel: {\n connected: this.tunnelService.isRunning(),\n publicUrl: this.tunnelService.getPublicUrl(),\n },\n webhooks: {\n registered,\n totalDeliveries: deliveries.length,\n successCount,\n errorCount,\n ignoredCount,\n },\n startedAt: this.startedAt,\n };\n }\n\n getDeliveryHistory(): readonly WebhookDeliveryRecord[] {\n const ghService = this.webhookService as GitHubWebhookService;\n if (typeof ghService.getDeliveryHistory === 'function') {\n return ghService.getDeliveryHistory();\n }\n return [];\n }\n}\n\n// --- Singleton accessors (follows NotificationWatcherService pattern) ---\n\nlet managerInstance: WebhookManagerService | null = null;\n\n/**\n * Initialize the webhook manager singleton.\n * Must be called once during web server startup.\n *\n * @throws Error if the manager is already initialized\n */\nexport function initializeWebhookManager(\n tunnelService: ITunnelService,\n webhookService: IWebhookService\n): void {\n if (managerInstance !== null) {\n throw new Error('Webhook manager already initialized. Cannot re-initialize.');\n }\n\n managerInstance = new WebhookManagerService(tunnelService, webhookService);\n}\n\n/**\n * Get the webhook manager singleton.\n *\n * @returns The webhook manager service\n * @throws Error if the manager hasn't been initialized yet\n */\nexport function getWebhookManager(): WebhookManagerService {\n if (managerInstance === null) {\n throw new Error(\n 'Webhook manager not initialized. Call initializeWebhookManager() during web server startup.'\n );\n }\n\n return managerInstance;\n}\n\n/**\n * Check if the webhook manager has been initialized.\n */\nexport function hasWebhookManager(): boolean {\n return managerInstance !== null;\n}\n\n/**\n * Reset the webhook manager singleton (for testing purposes only).\n * Stops the manager if running before resetting.\n *\n * @internal\n */\nexport function resetWebhookManager(): void {\n if (managerInstance !== null) {\n void managerInstance.stop();\n }\n managerInstance = null;\n}\n","/**\n * Webhook System Status: GET /api/webhooks/status\n *\n * Returns the full webhook system status including tunnel state,\n * registered webhooks, and delivery statistics.\n */\n\nimport {\n hasWebhookManager,\n getWebhookManager,\n} from '@shepai/core/infrastructure/services/webhook/webhook-manager.service';\n\nexport const dynamic = 'force-dynamic';\n\nexport async function GET(): Promise<Response> {\n if (!hasWebhookManager()) {\n return Response.json({\n running: false,\n tunnel: { connected: false, publicUrl: null },\n webhooks: {\n registered: [],\n totalDeliveries: 0,\n successCount: 0,\n errorCount: 0,\n ignoredCount: 0,\n },\n startedAt: null,\n });\n }\n\n const manager = getWebhookManager();\n return Response.json(manager.getStatus());\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"standalone\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/webhooks/status/route\",\n pathname: \"/api/webhooks/status\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/presentation/web/app/api/webhooks/status/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/webhooks/status/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n"],"names":[],"mappings":"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","ignoreList":[2]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},9851,e=>{"use strict";function t(){throw Error("Webhook manager not initialized. Call initializeWebhookManager() during web server startup.")}function r(){return!1}e.s(["getWebhookManager",()=>t,"hasWebhookManager",()=>r])},51828,e=>{"use strict";var t=e.i(22925),r=e.i(62995),a=e.i(14112),n=e.i(31716),i=e.i(16340),o=e.i(40522),s=e.i(21994),l=e.i(5802),d=e.i(17171),u=e.i(177),p=e.i(43685),c=e.i(84832),h=e.i(92435),v=e.i(41260),R=e.i(80556),x=e.i(93695);e.i(97230);var g=e.i(35162),m=e.i(9851);async function f(e){if(!(0,m.hasWebhookManager)())return Response.json({deliveries:[]});let t=new URL(e.url),r=t.searchParams.get("status"),a=t.searchParams.get("eventType"),n=t.searchParams.get("limit"),i=n?Math.min(parseInt(n,10)||50,200):50,o=[...(0,m.getWebhookManager)().getDeliveryHistory()];return r&&(o=o.filter(e=>e.status===r)),a&&(o=o.filter(e=>e.eventType===a)),Response.json({deliveries:o.slice(0,i)})}e.s(["GET",()=>f,"dynamic",0,"force-dynamic"],56914);var w=e.i(56914);let E=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/webhooks/deliveries/route",pathname:"/api/webhooks/deliveries",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/presentation/web/app/api/webhooks/deliveries/route.ts",nextConfigOutput:"standalone",userland:w}),{workAsyncStorage:b,workUnitAsyncStorage:y,serverHooks:C}=E;function k(){return(0,a.patchFetch)({workAsyncStorage:b,workUnitAsyncStorage:y})}async function A(e,t,a){E.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let m="/api/webhooks/deliveries/route";m=m.replace(/\/index$/,"")||"/";let f=await E.prepare(e,t,{srcPage:m,multiZoneDraftMode:!1});if(!f)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:w,params:b,nextConfig:y,parsedUrl:C,isDraftMode:k,prerenderManifest:A,routerServerContext:T,isOnDemandRevalidate:P,revalidateOnlyGenerated:N,resolvedPathname:O,clientReferenceManifest:_,serverActionsManifest:q}=f,S=(0,s.normalizeAppPath)(m),H=!!(A.dynamicRoutes[S]||A.routes[O]),M=async()=>((null==T?void 0:T.render404)?await T.render404(e,t,C,!1):t.end("This page could not be found"),null);if(H&&!k){let e=!!A.routes[O],t=A.dynamicRoutes[S];if(t&&!1===t.fallback&&!e){if(y.experimental.adapterPath)return await M();throw new x.NoFallbackError}}let j=null;!H||E.isDev||k||(j="/index"===(j=O)?"/":j);let U=!0===E.isDev||!H,I=H&&!U;q&&_&&(0,o.setManifestsSingleton)({page:m,clientReferenceManifest:_,serverActionsManifest:q});let D=e.method||"GET",$=(0,i.getTracer)(),F=$.getActiveScopeSpan(),K={params:b,prerenderManifest:A,renderOpts:{experimental:{authInterrupts:!!y.experimental.authInterrupts},cacheComponents:!!y.cacheComponents,supportsDynamicResponse:U,incrementalCache:(0,n.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:y.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>E.onRequestError(e,t,a,n,T)},sharedContext:{buildId:w}},W=new l.NodeNextRequest(e),L=new l.NodeNextResponse(t),B=d.NextRequestAdapter.fromNodeNextRequest(W,(0,d.signalFromNodeResponse)(t));try{let o=async e=>E.handle(B,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${D} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t)}else e.updateName(`${D} ${m}`)}),s=!!(0,n.getRequestMeta)(e,"minimalMode"),l=async n=>{var i,l;let d=async({previousCacheEntry:r})=>{try{if(!s&&P&&N&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(n);e.fetchMetrics=K.renderOpts.fetchMetrics;let l=K.renderOpts.pendingWaitUntil;l&&a.waitUntil&&(a.waitUntil(l),l=void 0);let d=K.renderOpts.collectedTags;if(!H)return await (0,c.sendResponse)(W,L,i,K.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);d&&(t[R.NEXT_CACHE_TAGS_HEADER]=d),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=R.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,a=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=R.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await E.onRequestError(e,t,{routerKind:"App Router",routePath:m,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:I,isOnDemandRevalidate:P})},!1,T),t}},u=await E.handleResponse({req:e,nextConfig:y,cacheKey:j,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:N,responseGenerator:d,waitUntil:a.waitUntil,isMinimalMode:s});if(!H)return null;if((null==u||null==(i=u.value)?void 0:i.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(l=u.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",P?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),k&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let x=(0,h.fromNodeOutgoingHttpHeaders)(u.value.headers);return s&&H||x.delete(R.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||x.get("Cache-Control")||x.set("Cache-Control",(0,v.getCacheControlHeader)(u.cacheControl)),await (0,c.sendResponse)(W,L,new Response(u.value.body,{headers:x,status:u.value.status||200})),null};F?await l(F):await $.withPropagatedContext(e.headers,()=>$.trace(u.BaseServerSpan.handleRequest,{spanName:`${D} ${m}`,kind:i.SpanKind.SERVER,attributes:{"http.method":D,"http.target":e.url}},l))}catch(t){if(t instanceof x.NoFallbackError||await E.onRequestError(e,t,{routerKind:"App Router",routePath:S,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:I,isOnDemandRevalidate:P})},!1,T),H)throw t;return await (0,c.sendResponse)(W,L,new Response(null,{status:500})),null}}e.s(["handler",()=>A,"patchFetch",()=>k,"routeModule",()=>E,"serverHooks",()=>C,"workAsyncStorage",()=>b,"workUnitAsyncStorage",()=>y],51828)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__23be381e._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.ts","../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/dist/esm/build/templates/app-route.js","../../../../../../src/presentation/web/app/api/webhooks/deliveries/route.ts"],"sourcesContent":["/**\n * Webhook Manager Service\n *\n * Orchestrates the Cloudflare Tunnel and GitHub Webhook lifecycle.\n * Follows the singleton pattern used by NotificationWatcherService\n * and PrSyncWatcherService.\n *\n * Lifecycle:\n * 1. Start Cloudflare Tunnel to get a public URL\n * 2. Register GitHub webhooks pointing to the tunnel URL\n * 3. Monitor for tunnel URL changes → update webhooks\n * 4. On shutdown → remove webhooks → stop tunnel\n *\n * The manager is optional — if cloudflared is not installed or webhook\n * registration fails, the system falls back to polling gracefully.\n */\n\nimport type { ITunnelService } from '../../../application/ports/output/services/tunnel-service.interface.js';\nimport type { IWebhookService } from '../../../application/ports/output/services/webhook-service.interface.js';\nimport type {\n RegisteredWebhook,\n WebhookDeliveryRecord,\n GitHubWebhookService,\n} from './github-webhook.service.js';\n\nexport interface WebhookSystemStatus {\n running: boolean;\n tunnel: {\n connected: boolean;\n publicUrl: string | null;\n };\n webhooks: {\n registered: readonly RegisteredWebhook[];\n totalDeliveries: number;\n successCount: number;\n errorCount: number;\n ignoredCount: number;\n };\n startedAt: string | null;\n}\n\nconst TAG = '[WebhookManager]';\n\nexport class WebhookManagerService {\n private readonly tunnelService: ITunnelService;\n private readonly webhookService: IWebhookService;\n private running = false;\n private startedAt: string | null = null;\n\n constructor(tunnelService: ITunnelService, webhookService: IWebhookService) {\n this.tunnelService = tunnelService;\n this.webhookService = webhookService;\n }\n\n /**\n * Start the tunnel and register webhooks.\n * Fails gracefully — logs warnings but does not throw.\n *\n * @param localPort - The local web server port to tunnel\n */\n async start(localPort: number): Promise<void> {\n if (this.running) return;\n\n try {\n // Step 1: Start the tunnel\n // eslint-disable-next-line no-console\n console.log(`${TAG} Starting Cloudflare Tunnel for port ${localPort}...`);\n const publicUrl = await this.tunnelService.start(localPort);\n\n // Step 2: Listen for URL changes\n this.tunnelService.onUrlChange(async (newUrl) => {\n // eslint-disable-next-line no-console\n console.log(`${TAG} Tunnel URL changed, updating webhooks...`);\n try {\n await this.webhookService.updateWebhookUrl(newUrl);\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n // eslint-disable-next-line no-console\n console.warn(`${TAG} Failed to update webhooks after URL change: ${msg}`);\n }\n });\n\n // Step 3: Register webhooks with external services\n await this.webhookService.registerWebhooks(publicUrl);\n\n this.running = true;\n this.startedAt = new Date().toISOString();\n // eslint-disable-next-line no-console\n console.log(`${TAG} Webhook system ready (tunnel: ${publicUrl})`);\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n // eslint-disable-next-line no-console\n console.warn(`${TAG} Failed to start webhook system (falling back to polling): ${msg}`);\n\n // Clean up partial state\n try {\n await this.tunnelService.stop();\n } catch {\n // Already stopped or never started\n }\n }\n }\n\n /**\n * Stop the webhook system — remove webhooks, then stop the tunnel.\n */\n async stop(): Promise<void> {\n if (!this.running) return;\n\n // eslint-disable-next-line no-console\n console.log(`${TAG} Shutting down webhook system...`);\n\n try {\n await this.webhookService.removeWebhooks();\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n // eslint-disable-next-line no-console\n console.warn(`${TAG} Failed to remove webhooks during shutdown: ${msg}`);\n }\n\n try {\n await this.tunnelService.stop();\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n // eslint-disable-next-line no-console\n console.warn(`${TAG} Failed to stop tunnel during shutdown: ${msg}`);\n }\n\n this.running = false;\n // eslint-disable-next-line no-console\n console.log(`${TAG} Webhook system stopped`);\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n getTunnelUrl(): string | null {\n return this.tunnelService.getPublicUrl();\n }\n\n getStatus(): WebhookSystemStatus {\n const ghService = this.webhookService as GitHubWebhookService;\n const deliveries =\n typeof ghService.getDeliveryHistory === 'function' ? ghService.getDeliveryHistory() : [];\n\n const registered =\n typeof ghService.getRegisteredWebhooks === 'function'\n ? ghService.getRegisteredWebhooks()\n : [];\n\n let successCount = 0;\n let errorCount = 0;\n let ignoredCount = 0;\n for (const d of deliveries) {\n if (d.status === 'success') successCount++;\n else if (d.status === 'error') errorCount++;\n else ignoredCount++;\n }\n\n return {\n running: this.running,\n tunnel: {\n connected: this.tunnelService.isRunning(),\n publicUrl: this.tunnelService.getPublicUrl(),\n },\n webhooks: {\n registered,\n totalDeliveries: deliveries.length,\n successCount,\n errorCount,\n ignoredCount,\n },\n startedAt: this.startedAt,\n };\n }\n\n getDeliveryHistory(): readonly WebhookDeliveryRecord[] {\n const ghService = this.webhookService as GitHubWebhookService;\n if (typeof ghService.getDeliveryHistory === 'function') {\n return ghService.getDeliveryHistory();\n }\n return [];\n }\n}\n\n// --- Singleton accessors (follows NotificationWatcherService pattern) ---\n\nlet managerInstance: WebhookManagerService | null = null;\n\n/**\n * Initialize the webhook manager singleton.\n * Must be called once during web server startup.\n *\n * @throws Error if the manager is already initialized\n */\nexport function initializeWebhookManager(\n tunnelService: ITunnelService,\n webhookService: IWebhookService\n): void {\n if (managerInstance !== null) {\n throw new Error('Webhook manager already initialized. Cannot re-initialize.');\n }\n\n managerInstance = new WebhookManagerService(tunnelService, webhookService);\n}\n\n/**\n * Get the webhook manager singleton.\n *\n * @returns The webhook manager service\n * @throws Error if the manager hasn't been initialized yet\n */\nexport function getWebhookManager(): WebhookManagerService {\n if (managerInstance === null) {\n throw new Error(\n 'Webhook manager not initialized. Call initializeWebhookManager() during web server startup.'\n );\n }\n\n return managerInstance;\n}\n\n/**\n * Check if the webhook manager has been initialized.\n */\nexport function hasWebhookManager(): boolean {\n return managerInstance !== null;\n}\n\n/**\n * Reset the webhook manager singleton (for testing purposes only).\n * Stops the manager if running before resetting.\n *\n * @internal\n */\nexport function resetWebhookManager(): void {\n if (managerInstance !== null) {\n void managerInstance.stop();\n }\n managerInstance = null;\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"standalone\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/webhooks/deliveries/route\",\n pathname: \"/api/webhooks/deliveries\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/presentation/web/app/api/webhooks/deliveries/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/webhooks/deliveries/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n","/**\n * Webhook Delivery History: GET /api/webhooks/deliveries\n *\n * Returns recent webhook delivery records with optional filtering.\n * Query params: ?status=success|error|ignored&eventType=pull_request&limit=50\n */\n\nimport {\n hasWebhookManager,\n getWebhookManager,\n} from '@shepai/core/infrastructure/services/webhook/webhook-manager.service';\n\nexport const dynamic = 'force-dynamic';\n\nexport async function GET(request: Request): Promise<Response> {\n if (!hasWebhookManager()) {\n return Response.json({ deliveries: [] });\n }\n\n const url = new URL(request.url);\n const statusFilter = url.searchParams.get('status');\n const eventTypeFilter = url.searchParams.get('eventType');\n const limitParam = url.searchParams.get('limit');\n const limit = limitParam ? Math.min(parseInt(limitParam, 10) || 50, 200) : 50;\n\n const manager = getWebhookManager();\n let deliveries = [...manager.getDeliveryHistory()];\n\n if (statusFilter) {\n deliveries = deliveries.filter((d) => d.status === statusFilter);\n }\n if (eventTypeFilter) {\n deliveries = deliveries.filter((d) => d.eventType === eventTypeFilter);\n }\n\n return Response.json({ deliveries: deliveries.slice(0, limit) });\n}\n"],"names":[],"mappings":"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","ignoreList":[1]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},40060,e=>{"use strict";function t(e){let t=globalThis.__shepContainer;if(!t)throw Error("DI container not available. Ensure the CLI bootstrap or dev-server has initialized it.");return t.resolve(e)}e.s(["resolve",()=>t])},9851,e=>{"use strict";function t(){throw Error("Webhook manager not initialized. Call initializeWebhookManager() during web server startup.")}function r(){return!1}e.s(["getWebhookManager",()=>t,"hasWebhookManager",()=>r])},55344,e=>{"use strict";var t=e.i(22925),r=e.i(62995),n=e.i(14112),a=e.i(31716),o=e.i(16340),s=e.i(40522),i=e.i(21994),l=e.i(5802),u=e.i(17171),d=e.i(177),p=e.i(43685),c=e.i(84832),h=e.i(92435),v=e.i(41260),g=e.i(80556),R=e.i(93695);e.i(97230);var x=e.i(35162),b=e.i(40060),f=e.i(9851);async function w(e){let t,r;if(!(0,f.hasWebhookManager)())return Response.json({error:"Webhook system not initialized"},{status:503});let n=await e.text();if(!n)return Response.json({error:"Empty request body"},{status:400});try{t=(0,b.resolve)("IWebhookService")}catch{return Response.json({error:"Webhook service not available"},{status:503})}let a=e.headers.get("x-hub-signature-256")??"",o=t.validateSignature(n,a,t.getSecret());if(!o.valid)return console.warn(`[WebhookRoute] Invalid signature: ${o.error}`),Response.json({error:`Invalid signature: ${o.error}`},{status:401});let s=e.headers.get("x-github-event")??"unknown",i=e.headers.get("x-github-delivery")??"unknown";try{r=JSON.parse(n)}catch{return Response.json({error:"Invalid JSON payload"},{status:400})}return t.handleEvent({source:"github",eventType:s,deliveryId:i,payload:r}),Response.json({received:!0,deliveryId:i})}async function m(){let e=(0,f.hasWebhookManager)();return Response.json({active:e,message:e?"Webhook receiver is active":"Webhook system not initialized (cloudflared may not be installed)"})}e.s(["GET",()=>m,"POST",()=>w,"dynamic",0,"force-dynamic"],49854);var E=e.i(49854);let y=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/webhooks/github/route",pathname:"/api/webhooks/github",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/presentation/web/app/api/webhooks/github/route.ts",nextConfigOutput:"standalone",userland:E}),{workAsyncStorage:C,workUnitAsyncStorage:k,serverHooks:A}=y;function T(){return(0,n.patchFetch)({workAsyncStorage:C,workUnitAsyncStorage:k})}async function N(e,t,n){y.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let b="/api/webhooks/github/route";b=b.replace(/\/index$/,"")||"/";let f=await y.prepare(e,t,{srcPage:b,multiZoneDraftMode:!1});if(!f)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:w,params:m,nextConfig:E,parsedUrl:C,isDraftMode:k,prerenderManifest:A,routerServerContext:T,isOnDemandRevalidate:N,revalidateOnlyGenerated:S,resolvedPathname:O,clientReferenceManifest:P,serverActionsManifest:j}=f,_=(0,i.normalizeAppPath)(b),I=!!(A.dynamicRoutes[_]||A.routes[O]),q=async()=>((null==T?void 0:T.render404)?await T.render404(e,t,C,!1):t.end("This page could not be found"),null);if(I&&!k){let e=!!A.routes[O],t=A.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(E.experimental.adapterPath)return await q();throw new R.NoFallbackError}}let H=null;!I||y.isDev||k||(H="/index"===(H=O)?"/":H);let M=!0===y.isDev||!I,U=I&&!M;j&&P&&(0,s.setManifestsSingleton)({page:b,clientReferenceManifest:P,serverActionsManifest:j});let D=e.method||"GET",W=(0,o.getTracer)(),$=W.getActiveScopeSpan(),F={params:m,prerenderManifest:A,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:M,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:E.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>y.onRequestError(e,t,n,a,T)},sharedContext:{buildId:w}},K=new l.NodeNextRequest(e),z=new l.NodeNextResponse(t),L=u.NextRequestAdapter.fromNodeNextRequest(K,(0,u.signalFromNodeResponse)(t));try{let s=async e=>y.handle(L,F).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=W.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${D} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${D} ${b}`)}),i=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var o,l;let u=async({previousCacheEntry:r})=>{try{if(!i&&N&&S&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await s(a);e.fetchMetrics=F.renderOpts.fetchMetrics;let l=F.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let u=F.renderOpts.collectedTags;if(!I)return await (0,c.sendResponse)(K,z,o,F.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(o.headers);u&&(t[g.NEXT_CACHE_TAGS_HEADER]=u),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==F.renderOpts.collectedRevalidate&&!(F.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&F.renderOpts.collectedRevalidate,n=void 0===F.renderOpts.collectedExpire||F.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:F.renderOpts.collectedExpire;return{value:{kind:x.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await y.onRequestError(e,t,{routerKind:"App Router",routePath:b,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:N})},!1,T),t}},d=await y.handleResponse({req:e,nextConfig:E,cacheKey:H,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:S,responseGenerator:u,waitUntil:n.waitUntil,isMinimalMode:i});if(!I)return null;if((null==d||null==(o=d.value)?void 0:o.kind)!==x.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(l=d.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});i||t.setHeader("x-nextjs-cache",N?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),k&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let R=(0,h.fromNodeOutgoingHttpHeaders)(d.value.headers);return i&&I||R.delete(g.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||R.get("Cache-Control")||R.set("Cache-Control",(0,v.getCacheControlHeader)(d.cacheControl)),await (0,c.sendResponse)(K,z,new Response(d.value.body,{headers:R,status:d.value.status||200})),null};$?await l($):await W.withPropagatedContext(e.headers,()=>W.trace(d.BaseServerSpan.handleRequest,{spanName:`${D} ${b}`,kind:o.SpanKind.SERVER,attributes:{"http.method":D,"http.target":e.url}},l))}catch(t){if(t instanceof R.NoFallbackError||await y.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:N})},!1,T),I)throw t;return await (0,c.sendResponse)(K,z,new Response(null,{status:500})),null}}e.s(["handler",()=>N,"patchFetch",()=>T,"routeModule",()=>y,"serverHooks",()=>A,"workAsyncStorage",()=>C,"workUnitAsyncStorage",()=>k],55344)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__9fc760c0._.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/presentation/web/lib/server-container.ts","../../../../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.ts","../../../../../../src/presentation/web/app/api/webhooks/github/route.ts","../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/dist/esm/build/templates/app-route.js"],"sourcesContent":["/**\n * Server Container Accessor\n *\n * Provides a `resolve()` helper for server components and API routes to\n * obtain DI-managed instances. The tsyringe container is placed on globalThis\n * by the CLI bootstrap (`shep ui`) or the dev-server (`pnpm dev:web`).\n */\n\nimport type { DependencyContainer, InjectionToken } from 'tsyringe';\n\nconst CONTAINER_KEY = '__shepContainer';\n\n/**\n * Resolve a dependency from the DI container.\n *\n * Usage in server components / API routes:\n * ```ts\n * import { resolve } from '@/lib/server-container';\n * import { ListFeaturesUseCase } from '@shepai/core/application/use-cases/features/list-features.use-case';\n *\n * const features = await resolve(ListFeaturesUseCase).execute();\n * ```\n */\nexport function resolve<T>(token: InjectionToken<T>): T {\n const container = (globalThis as Record<string, unknown>)[CONTAINER_KEY] as\n | DependencyContainer\n | undefined;\n\n if (!container) {\n throw new Error(\n 'DI container not available. Ensure the CLI bootstrap or dev-server has initialized it.'\n );\n }\n\n return container.resolve(token);\n}\n","/**\n * Webhook Manager Service\n *\n * Orchestrates the Cloudflare Tunnel and GitHub Webhook lifecycle.\n * Follows the singleton pattern used by NotificationWatcherService\n * and PrSyncWatcherService.\n *\n * Lifecycle:\n * 1. Start Cloudflare Tunnel to get a public URL\n * 2. Register GitHub webhooks pointing to the tunnel URL\n * 3. Monitor for tunnel URL changes → update webhooks\n * 4. On shutdown → remove webhooks → stop tunnel\n *\n * The manager is optional — if cloudflared is not installed or webhook\n * registration fails, the system falls back to polling gracefully.\n */\n\nimport type { ITunnelService } from '../../../application/ports/output/services/tunnel-service.interface.js';\nimport type { IWebhookService } from '../../../application/ports/output/services/webhook-service.interface.js';\nimport type {\n RegisteredWebhook,\n WebhookDeliveryRecord,\n GitHubWebhookService,\n} from './github-webhook.service.js';\n\nexport interface WebhookSystemStatus {\n running: boolean;\n tunnel: {\n connected: boolean;\n publicUrl: string | null;\n };\n webhooks: {\n registered: readonly RegisteredWebhook[];\n totalDeliveries: number;\n successCount: number;\n errorCount: number;\n ignoredCount: number;\n };\n startedAt: string | null;\n}\n\nconst TAG = '[WebhookManager]';\n\nexport class WebhookManagerService {\n private readonly tunnelService: ITunnelService;\n private readonly webhookService: IWebhookService;\n private running = false;\n private startedAt: string | null = null;\n\n constructor(tunnelService: ITunnelService, webhookService: IWebhookService) {\n this.tunnelService = tunnelService;\n this.webhookService = webhookService;\n }\n\n /**\n * Start the tunnel and register webhooks.\n * Fails gracefully — logs warnings but does not throw.\n *\n * @param localPort - The local web server port to tunnel\n */\n async start(localPort: number): Promise<void> {\n if (this.running) return;\n\n try {\n // Step 1: Start the tunnel\n // eslint-disable-next-line no-console\n console.log(`${TAG} Starting Cloudflare Tunnel for port ${localPort}...`);\n const publicUrl = await this.tunnelService.start(localPort);\n\n // Step 2: Listen for URL changes\n this.tunnelService.onUrlChange(async (newUrl) => {\n // eslint-disable-next-line no-console\n console.log(`${TAG} Tunnel URL changed, updating webhooks...`);\n try {\n await this.webhookService.updateWebhookUrl(newUrl);\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n // eslint-disable-next-line no-console\n console.warn(`${TAG} Failed to update webhooks after URL change: ${msg}`);\n }\n });\n\n // Step 3: Register webhooks with external services\n await this.webhookService.registerWebhooks(publicUrl);\n\n this.running = true;\n this.startedAt = new Date().toISOString();\n // eslint-disable-next-line no-console\n console.log(`${TAG} Webhook system ready (tunnel: ${publicUrl})`);\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n // eslint-disable-next-line no-console\n console.warn(`${TAG} Failed to start webhook system (falling back to polling): ${msg}`);\n\n // Clean up partial state\n try {\n await this.tunnelService.stop();\n } catch {\n // Already stopped or never started\n }\n }\n }\n\n /**\n * Stop the webhook system — remove webhooks, then stop the tunnel.\n */\n async stop(): Promise<void> {\n if (!this.running) return;\n\n // eslint-disable-next-line no-console\n console.log(`${TAG} Shutting down webhook system...`);\n\n try {\n await this.webhookService.removeWebhooks();\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n // eslint-disable-next-line no-console\n console.warn(`${TAG} Failed to remove webhooks during shutdown: ${msg}`);\n }\n\n try {\n await this.tunnelService.stop();\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n // eslint-disable-next-line no-console\n console.warn(`${TAG} Failed to stop tunnel during shutdown: ${msg}`);\n }\n\n this.running = false;\n // eslint-disable-next-line no-console\n console.log(`${TAG} Webhook system stopped`);\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n getTunnelUrl(): string | null {\n return this.tunnelService.getPublicUrl();\n }\n\n getStatus(): WebhookSystemStatus {\n const ghService = this.webhookService as GitHubWebhookService;\n const deliveries =\n typeof ghService.getDeliveryHistory === 'function' ? ghService.getDeliveryHistory() : [];\n\n const registered =\n typeof ghService.getRegisteredWebhooks === 'function'\n ? ghService.getRegisteredWebhooks()\n : [];\n\n let successCount = 0;\n let errorCount = 0;\n let ignoredCount = 0;\n for (const d of deliveries) {\n if (d.status === 'success') successCount++;\n else if (d.status === 'error') errorCount++;\n else ignoredCount++;\n }\n\n return {\n running: this.running,\n tunnel: {\n connected: this.tunnelService.isRunning(),\n publicUrl: this.tunnelService.getPublicUrl(),\n },\n webhooks: {\n registered,\n totalDeliveries: deliveries.length,\n successCount,\n errorCount,\n ignoredCount,\n },\n startedAt: this.startedAt,\n };\n }\n\n getDeliveryHistory(): readonly WebhookDeliveryRecord[] {\n const ghService = this.webhookService as GitHubWebhookService;\n if (typeof ghService.getDeliveryHistory === 'function') {\n return ghService.getDeliveryHistory();\n }\n return [];\n }\n}\n\n// --- Singleton accessors (follows NotificationWatcherService pattern) ---\n\nlet managerInstance: WebhookManagerService | null = null;\n\n/**\n * Initialize the webhook manager singleton.\n * Must be called once during web server startup.\n *\n * @throws Error if the manager is already initialized\n */\nexport function initializeWebhookManager(\n tunnelService: ITunnelService,\n webhookService: IWebhookService\n): void {\n if (managerInstance !== null) {\n throw new Error('Webhook manager already initialized. Cannot re-initialize.');\n }\n\n managerInstance = new WebhookManagerService(tunnelService, webhookService);\n}\n\n/**\n * Get the webhook manager singleton.\n *\n * @returns The webhook manager service\n * @throws Error if the manager hasn't been initialized yet\n */\nexport function getWebhookManager(): WebhookManagerService {\n if (managerInstance === null) {\n throw new Error(\n 'Webhook manager not initialized. Call initializeWebhookManager() during web server startup.'\n );\n }\n\n return managerInstance;\n}\n\n/**\n * Check if the webhook manager has been initialized.\n */\nexport function hasWebhookManager(): boolean {\n return managerInstance !== null;\n}\n\n/**\n * Reset the webhook manager singleton (for testing purposes only).\n * Stops the manager if running before resetting.\n *\n * @internal\n */\nexport function resetWebhookManager(): void {\n if (managerInstance !== null) {\n void managerInstance.stop();\n }\n managerInstance = null;\n}\n","/**\n * GitHub Webhook Receiver: POST /api/webhooks/github\n *\n * Receives webhook events from GitHub, validates the HMAC-SHA256 signature,\n * and routes the event to the GitHubWebhookService for processing.\n *\n * This endpoint is exposed via a Cloudflare Tunnel so GitHub can reach it.\n * Only POST requests are accepted; all other methods return 405.\n */\n\nimport { resolve } from '@/lib/server-container';\nimport type { GitHubWebhookService } from '@shepai/core/infrastructure/services/webhook/github-webhook.service';\nimport { hasWebhookManager } from '@shepai/core/infrastructure/services/webhook/webhook-manager.service';\n\nexport const dynamic = 'force-dynamic';\n\nexport async function POST(request: Request): Promise<Response> {\n // Verify webhook system is running\n if (!hasWebhookManager()) {\n return Response.json({ error: 'Webhook system not initialized' }, { status: 503 });\n }\n\n // Read raw body for signature validation\n const rawBody = await request.text();\n if (!rawBody) {\n return Response.json({ error: 'Empty request body' }, { status: 400 });\n }\n\n // Get the webhook service from DI container\n let webhookService: GitHubWebhookService;\n try {\n webhookService = resolve<GitHubWebhookService>('IWebhookService');\n } catch {\n return Response.json({ error: 'Webhook service not available' }, { status: 503 });\n }\n\n // Validate GitHub signature\n const signature = request.headers.get('x-hub-signature-256') ?? '';\n const validation = webhookService.validateSignature(\n rawBody,\n signature,\n webhookService.getSecret()\n );\n\n if (!validation.valid) {\n // eslint-disable-next-line no-console\n console.warn(`[WebhookRoute] Invalid signature: ${validation.error}`);\n return Response.json({ error: `Invalid signature: ${validation.error}` }, { status: 401 });\n }\n\n // Parse the event\n const eventType = request.headers.get('x-github-event') ?? 'unknown';\n const deliveryId = request.headers.get('x-github-delivery') ?? 'unknown';\n\n let payload: Record<string, unknown>;\n try {\n payload = JSON.parse(rawBody);\n } catch {\n return Response.json({ error: 'Invalid JSON payload' }, { status: 400 });\n }\n\n // Process the event asynchronously (respond immediately to GitHub)\n void webhookService.handleEvent({\n source: 'github',\n eventType,\n deliveryId,\n payload,\n });\n\n return Response.json({ received: true, deliveryId });\n}\n\n/**\n * Health check: GET /api/webhooks/github\n * Returns whether the webhook system is active.\n */\nexport async function GET(): Promise<Response> {\n const active = hasWebhookManager();\n\n return Response.json({\n active,\n message: active\n ? 'Webhook receiver is active'\n : 'Webhook system not initialized (cloudflared may not be installed)',\n });\n}\n","import { AppRouteRouteModule } from \"next/dist/esm/server/route-modules/app-route/module.compiled\";\nimport { RouteKind } from \"next/dist/esm/server/route-kind\";\nimport { patchFetch as _patchFetch } from \"next/dist/esm/server/lib/patch-fetch\";\nimport { addRequestMeta, getRequestMeta } from \"next/dist/esm/server/request-meta\";\nimport { getTracer, SpanKind } from \"next/dist/esm/server/lib/trace/tracer\";\nimport { setManifestsSingleton } from \"next/dist/esm/server/app-render/manifests-singleton\";\nimport { normalizeAppPath } from \"next/dist/esm/shared/lib/router/utils/app-paths\";\nimport { NodeNextRequest, NodeNextResponse } from \"next/dist/esm/server/base-http/node\";\nimport { NextRequestAdapter, signalFromNodeResponse } from \"next/dist/esm/server/web/spec-extension/adapters/next-request\";\nimport { BaseServerSpan } from \"next/dist/esm/server/lib/trace/constants\";\nimport { getRevalidateReason } from \"next/dist/esm/server/instrumentation/utils\";\nimport { sendResponse } from \"next/dist/esm/server/send-response\";\nimport { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from \"next/dist/esm/server/web/utils\";\nimport { getCacheControlHeader } from \"next/dist/esm/server/lib/cache-control\";\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from \"next/dist/esm/lib/constants\";\nimport { NoFallbackError } from \"next/dist/esm/shared/lib/no-fallback-error.external\";\nimport { CachedRouteKind } from \"next/dist/esm/server/response-cache\";\nimport * as userland from \"INNER_APP_ROUTE\";\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"standalone\"\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: \"/api/webhooks/github/route\",\n pathname: \"/api/webhooks/github\",\n filename: \"route\",\n bundlePath: \"\"\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: \"[project]/src/presentation/web/app/api/webhooks/github/route.ts\",\n nextConfigOutput,\n userland\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage\n });\n}\nexport { routeModule, workAsyncStorage, workUnitAsyncStorage, serverHooks, patchFetch, };\nexport async function handler(req, res, ctx) {\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());\n }\n let srcPage = \"/api/webhooks/github/route\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/';\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/';\n }\n const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return null;\n }\n const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;\n const normalizedSrcPage = normalizeAppPath(srcPage);\n let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);\n const render404 = async ()=>{\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext == null ? void 0 : routerServerContext.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false);\n } else {\n res.end('This page could not be found');\n }\n return null;\n };\n if (isIsr && !isDraftMode) {\n const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.experimental.adapterPath) {\n return await render404();\n }\n throw new NoFallbackError();\n }\n }\n }\n let cacheKey = null;\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname;\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey;\n }\n const supportsDynamicResponse = // If we're in development, we always support dynamic HTML\n routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports\n // dynamic HTML.\n !isIsr;\n // This is a revalidation request if the request is for a static\n // page and it is not being resumed from a postponed render and\n // it is not a dynamic RSC request then it is a revalidation\n // request.\n const isStaticGeneration = isIsr && !supportsDynamicResponse;\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest\n });\n }\n const method = req.method || 'GET';\n const tracer = getTracer();\n const activeSpan = tracer.getActiveScopeSpan();\n const context = {\n params,\n prerenderManifest,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts)\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n supportsDynamicResponse,\n incrementalCache: getRequestMeta(req, 'incrementalCache'),\n cacheLifeProfiles: nextConfig.cacheLife,\n waitUntil: ctx.waitUntil,\n onClose: (cb)=>{\n res.on('close', cb);\n },\n onAfterTaskError: undefined,\n onInstrumentationRequestError: (error, _request, errorContext, silenceLog)=>routeModule.onRequestError(req, error, errorContext, silenceLog, routerServerContext)\n },\n sharedContext: {\n buildId\n }\n };\n const nodeNextReq = new NodeNextRequest(req);\n const nodeNextRes = new NodeNextResponse(res);\n const nextReq = NextRequestAdapter.fromNodeNextRequest(nodeNextReq, signalFromNodeResponse(res));\n try {\n const invokeRouteModule = async (span)=>{\n return routeModule.handle(nextReq, context).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${srcPage}`);\n }\n });\n };\n const isMinimalMode = Boolean(process.env.MINIMAL_MODE || getRequestMeta(req, 'minimalMode'));\n const handleResponse = async (currentSpan)=>{\n var _cacheEntry_value;\n const responseGenerator = async ({ previousCacheEntry })=>{\n try {\n if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {\n res.statusCode = 404;\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED');\n res.end('This page could not be found');\n return null;\n }\n const response = await invokeRouteModule(currentSpan);\n req.fetchMetrics = context.renderOpts.fetchMetrics;\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil;\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil);\n pendingWaitUntil = undefined;\n }\n }\n const cacheTags = context.renderOpts.collectedTags;\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob();\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers);\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;\n }\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type;\n }\n const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= INFINITE_CACHE ? false : context.renderOpts.collectedRevalidate;\n const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= INFINITE_CACHE ? undefined : context.renderOpts.collectedExpire;\n // Create the cache entry for the response.\n const cacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers\n },\n cacheControl: {\n revalidate,\n expire\n }\n };\n return cacheEntry;\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);\n return null;\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n throw err;\n }\n };\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode\n });\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return null;\n }\n if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_ROUTE) {\n var _cacheEntry_value1;\n throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), \"__NEXT_ERROR_CODE\", {\n value: \"E701\",\n enumerable: false,\n configurable: true\n });\n }\n if (!isMinimalMode) {\n res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');\n }\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');\n }\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers);\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER);\n }\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {\n headers.set('Cache-Control', getCacheControlHeader(cacheEntry.cacheControl));\n }\n await sendResponse(nodeNextReq, nodeNextRes, // @ts-expect-error - Argument of type 'Buffer<ArrayBufferLike>' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200\n }));\n return null;\n };\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await handleResponse(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, handleResponse));\n }\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false;\n await routeModule.onRequestError(req, err, {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration,\n isOnDemandRevalidate\n })\n }, silenceLog, routerServerContext);\n }\n // rethrow so that we can handle serving error page\n // If this is during static generation, throw the error again.\n if (isIsr) throw err;\n // Otherwise, send a 500 response.\n await sendResponse(nodeNextReq, nodeNextRes, new Response(null, {\n status: 500\n }));\n return null;\n }\n}\n\n//# sourceMappingURL=app-route.js.map\n"],"names":[],"mappings":"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","ignoreList":[3]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[44981,59175,a=>{"use strict";var b=a.i(25700);let c=(0,b.default)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);a.s(["Activity",()=>c],44981);var d=a.i(10973),e=a.i(96960),f=a.i(55690),g=a.i(48972),h=a.i(59653),i=a.i(63496),j=a.i(6175),k=a.i(7420),l=a.i(48939),m=a.i(58761),n=a.i(51473),o=a.i(59675),p=a.i(5472),q=a.i(75988),r=a.i(80930),s=a.i(66873),t=a.i(90986),u=a.i(79406),v=a.i(17329),w=a.i(61476),x=a.i(64005),y=a.i(50049),z=a.i(16164),A=a.i(45291),B=[" ","Enter","ArrowUp","ArrowDown"],C=[" ","Enter"],D="Select",[E,F,G]=(0,i.createCollection)(D),[H,I]=(0,k.createContextScope)(D,[G,q.createPopperScope]),J=(0,q.createPopperScope)(),[K,L]=H(D),[M,N]=H(D),O=a=>{let{__scopeSelect:b,children:c,open:f,defaultOpen:g,onOpenChange:h,value:i,defaultValue:j,onValueChange:k,dir:m,name:n,autoComplete:o,disabled:r,required:s,form:t}=a,u=J(b),[w,x]=e.useState(null),[y,z]=e.useState(null),[A,B]=e.useState(!1),C=(0,l.useDirection)(m),[F,G]=(0,v.useControllableState)({prop:f,defaultProp:g??!1,onChange:h,caller:D}),[H,I]=(0,v.useControllableState)({prop:i,defaultProp:j,onChange:k,caller:D}),L=e.useRef(null),N=!w||t||!!w.closest("form"),[O,P]=e.useState(new Set),Q=Array.from(O).map(a=>a.props.value).join(";");return(0,d.jsx)(q.Root,{...u,children:(0,d.jsxs)(K,{required:s,scope:b,trigger:w,onTriggerChange:x,valueNode:y,onValueNodeChange:z,valueNodeHasChildren:A,onValueNodeHasChildrenChange:B,contentId:(0,p.useId)(),value:H,onValueChange:I,open:F,onOpenChange:G,dir:C,triggerPointerDownPosRef:L,disabled:r,children:[(0,d.jsx)(E.Provider,{scope:b,children:(0,d.jsx)(M,{scope:a.__scopeSelect,onNativeOptionAdd:e.useCallback(a=>{P(b=>new Set(b).add(a))},[]),onNativeOptionRemove:e.useCallback(a=>{P(b=>{let c=new Set(b);return c.delete(a),c})},[]),children:c})}),N?(0,d.jsxs)(aB,{"aria-hidden":!0,required:s,tabIndex:-1,name:n,autoComplete:o,value:H,onChange:a=>I(a.target.value),disabled:r,form:t,children:[void 0===H?(0,d.jsx)("option",{value:""}):null,Array.from(O)]},Q):null]})})};O.displayName=D;var P="SelectTrigger",Q=e.forwardRef((a,b)=>{let{__scopeSelect:c,disabled:f=!1,...g}=a,i=J(c),k=L(P,c),l=k.disabled||f,m=(0,j.useComposedRefs)(b,k.onTriggerChange),n=F(c),o=e.useRef("touch"),[p,r,t]=aD(a=>{let b=n().filter(a=>!a.disabled),c=b.find(a=>a.value===k.value),d=aE(b,a,c);void 0!==d&&k.onValueChange(d.value)}),u=a=>{l||(k.onOpenChange(!0),t()),a&&(k.triggerPointerDownPosRef.current={x:Math.round(a.pageX),y:Math.round(a.pageY)})};return(0,d.jsx)(q.Anchor,{asChild:!0,...i,children:(0,d.jsx)(s.Primitive.button,{type:"button",role:"combobox","aria-controls":k.contentId,"aria-expanded":k.open,"aria-required":k.required,"aria-autocomplete":"none",dir:k.dir,"data-state":k.open?"open":"closed",disabled:l,"data-disabled":l?"":void 0,"data-placeholder":aC(k.value)?"":void 0,...g,ref:m,onClick:(0,h.composeEventHandlers)(g.onClick,a=>{a.currentTarget.focus(),"mouse"!==o.current&&u(a)}),onPointerDown:(0,h.composeEventHandlers)(g.onPointerDown,a=>{o.current=a.pointerType;let b=a.target;b.hasPointerCapture(a.pointerId)&&b.releasePointerCapture(a.pointerId),0===a.button&&!1===a.ctrlKey&&"mouse"===a.pointerType&&(u(a),a.preventDefault())}),onKeyDown:(0,h.composeEventHandlers)(g.onKeyDown,a=>{let b=""!==p.current;a.ctrlKey||a.altKey||a.metaKey||1!==a.key.length||r(a.key),(!b||" "!==a.key)&&B.includes(a.key)&&(u(),a.preventDefault())})})})});Q.displayName=P;var R="SelectValue",S=e.forwardRef((a,b)=>{let{__scopeSelect:c,className:e,style:f,children:g,placeholder:h="",...i}=a,k=L(R,c),{onValueNodeHasChildrenChange:l}=k,m=void 0!==g,n=(0,j.useComposedRefs)(b,k.onValueNodeChange);return(0,w.useLayoutEffect)(()=>{l(m)},[l,m]),(0,d.jsx)(s.Primitive.span,{...i,ref:n,style:{pointerEvents:"none"},children:aC(k.value)?(0,d.jsx)(d.Fragment,{children:h}):g})});S.displayName=R;var T=e.forwardRef((a,b)=>{let{__scopeSelect:c,children:e,...f}=a;return(0,d.jsx)(s.Primitive.span,{"aria-hidden":!0,...f,ref:b,children:e||"▼"})});T.displayName="SelectIcon";var U=a=>(0,d.jsx)(r.Portal,{asChild:!0,...a});U.displayName="SelectPortal";var V="SelectContent",W=e.forwardRef((a,b)=>{let c=L(V,a.__scopeSelect),[g,h]=e.useState();return((0,w.useLayoutEffect)(()=>{h(new DocumentFragment)},[]),c.open)?(0,d.jsx)($,{...a,ref:b}):g?f.createPortal((0,d.jsx)(X,{scope:a.__scopeSelect,children:(0,d.jsx)(E.Slot,{scope:a.__scopeSelect,children:(0,d.jsx)("div",{children:a.children})})}),g):null});W.displayName=V;var[X,Y]=H(V),Z=(0,t.createSlot)("SelectContent.RemoveScroll"),$=e.forwardRef((a,b)=>{let{__scopeSelect:c,position:f="item-aligned",onCloseAutoFocus:g,onEscapeKeyDown:i,onPointerDownOutside:k,side:l,sideOffset:p,align:q,alignOffset:r,arrowPadding:s,collisionBoundary:t,collisionPadding:u,sticky:v,hideWhenDetached:w,avoidCollisions:x,...y}=a,B=L(V,c),[C,D]=e.useState(null),[E,G]=e.useState(null),H=(0,j.useComposedRefs)(b,a=>D(a)),[I,J]=e.useState(null),[K,M]=e.useState(null),N=F(c),[O,P]=e.useState(!1),Q=e.useRef(!1);e.useEffect(()=>{if(C)return(0,z.hideOthers)(C)},[C]),(0,n.useFocusGuards)();let R=e.useCallback(a=>{let[b,...c]=N().map(a=>a.ref.current),[d]=c.slice(-1),e=document.activeElement;for(let c of a)if(c===e||(c?.scrollIntoView({block:"nearest"}),c===b&&E&&(E.scrollTop=0),c===d&&E&&(E.scrollTop=E.scrollHeight),c?.focus(),document.activeElement!==e))return},[N,E]),S=e.useCallback(()=>R([I,C]),[R,I,C]);e.useEffect(()=>{O&&S()},[O,S]);let{onOpenChange:T,triggerPointerDownPosRef:U}=B;e.useEffect(()=>{if(C){let a={x:0,y:0},b=b=>{a={x:Math.abs(Math.round(b.pageX)-(U.current?.x??0)),y:Math.abs(Math.round(b.pageY)-(U.current?.y??0))}},c=c=>{a.x<=10&&a.y<=10?c.preventDefault():C.contains(c.target)||T(!1),document.removeEventListener("pointermove",b),U.current=null};return null!==U.current&&(document.addEventListener("pointermove",b),document.addEventListener("pointerup",c,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",b),document.removeEventListener("pointerup",c,{capture:!0})}}},[C,T,U]),e.useEffect(()=>{let a=()=>T(!1);return window.addEventListener("blur",a),window.addEventListener("resize",a),()=>{window.removeEventListener("blur",a),window.removeEventListener("resize",a)}},[T]);let[W,Y]=aD(a=>{let b=N().filter(a=>!a.disabled),c=b.find(a=>a.ref.current===document.activeElement),d=aE(b,a,c);d&&setTimeout(()=>d.ref.current.focus())}),$=e.useCallback((a,b,c)=>{let d=!Q.current&&!c;(void 0!==B.value&&B.value===b||d)&&(J(a),d&&(Q.current=!0))},[B.value]),ab=e.useCallback(()=>C?.focus(),[C]),ac=e.useCallback((a,b,c)=>{let d=!Q.current&&!c;(void 0!==B.value&&B.value===b||d)&&M(a)},[B.value]),ad="popper"===f?aa:_,ae=ad===aa?{side:l,sideOffset:p,align:q,alignOffset:r,arrowPadding:s,collisionBoundary:t,collisionPadding:u,sticky:v,hideWhenDetached:w,avoidCollisions:x}:{};return(0,d.jsx)(X,{scope:c,content:C,viewport:E,onViewportChange:G,itemRefCallback:$,selectedItem:I,onItemLeave:ab,itemTextRefCallback:ac,focusSelectedItem:S,selectedItemText:K,position:f,isPositioned:O,searchRef:W,children:(0,d.jsx)(A.RemoveScroll,{as:Z,allowPinchZoom:!0,children:(0,d.jsx)(o.FocusScope,{asChild:!0,trapped:B.open,onMountAutoFocus:a=>{a.preventDefault()},onUnmountAutoFocus:(0,h.composeEventHandlers)(g,a=>{B.trigger?.focus({preventScroll:!0}),a.preventDefault()}),children:(0,d.jsx)(m.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:i,onPointerDownOutside:k,onFocusOutside:a=>a.preventDefault(),onDismiss:()=>B.onOpenChange(!1),children:(0,d.jsx)(ad,{role:"listbox",id:B.contentId,"data-state":B.open?"open":"closed",dir:B.dir,onContextMenu:a=>a.preventDefault(),...y,...ae,onPlaced:()=>P(!0),ref:H,style:{display:"flex",flexDirection:"column",outline:"none",...y.style},onKeyDown:(0,h.composeEventHandlers)(y.onKeyDown,a=>{let b=a.ctrlKey||a.altKey||a.metaKey;if("Tab"===a.key&&a.preventDefault(),b||1!==a.key.length||Y(a.key),["ArrowUp","ArrowDown","Home","End"].includes(a.key)){let b=N().filter(a=>!a.disabled).map(a=>a.ref.current);if(["ArrowUp","End"].includes(a.key)&&(b=b.slice().reverse()),["ArrowUp","ArrowDown"].includes(a.key)){let c=a.target,d=b.indexOf(c);b=b.slice(d+1)}setTimeout(()=>R(b)),a.preventDefault()}})})})})})})});$.displayName="SelectContentImpl";var _=e.forwardRef((a,b)=>{let{__scopeSelect:c,onPlaced:f,...h}=a,i=L(V,c),k=Y(V,c),[l,m]=e.useState(null),[n,o]=e.useState(null),p=(0,j.useComposedRefs)(b,a=>o(a)),q=F(c),r=e.useRef(!1),t=e.useRef(!0),{viewport:u,selectedItem:v,selectedItemText:x,focusSelectedItem:y}=k,z=e.useCallback(()=>{if(i.trigger&&i.valueNode&&l&&n&&u&&v&&x){let a=i.trigger.getBoundingClientRect(),b=n.getBoundingClientRect(),c=i.valueNode.getBoundingClientRect(),d=x.getBoundingClientRect();if("rtl"!==i.dir){let e=d.left-b.left,f=c.left-e,h=a.left-f,i=a.width+h,j=Math.max(i,b.width),k=window.innerWidth-10,m=(0,g.clamp)(f,[10,Math.max(10,k-j)]);l.style.minWidth=i+"px",l.style.left=m+"px"}else{let e=b.right-d.right,f=window.innerWidth-c.right-e,h=window.innerWidth-a.right-f,i=a.width+h,j=Math.max(i,b.width),k=window.innerWidth-10,m=(0,g.clamp)(f,[10,Math.max(10,k-j)]);l.style.minWidth=i+"px",l.style.right=m+"px"}let e=q(),h=window.innerHeight-20,j=u.scrollHeight,k=window.getComputedStyle(n),m=parseInt(k.borderTopWidth,10),o=parseInt(k.paddingTop,10),p=parseInt(k.borderBottomWidth,10),s=m+o+j+parseInt(k.paddingBottom,10)+p,t=Math.min(5*v.offsetHeight,s),w=window.getComputedStyle(u),y=parseInt(w.paddingTop,10),z=parseInt(w.paddingBottom,10),A=a.top+a.height/2-10,B=v.offsetHeight/2,C=m+o+(v.offsetTop+B);if(C<=A){let a=e.length>0&&v===e[e.length-1].ref.current;l.style.bottom="0px";let b=Math.max(h-A,B+(a?z:0)+(n.clientHeight-u.offsetTop-u.offsetHeight)+p);l.style.height=C+b+"px"}else{let a=e.length>0&&v===e[0].ref.current;l.style.top="0px";let b=Math.max(A,m+u.offsetTop+(a?y:0)+B);l.style.height=b+(s-C)+"px",u.scrollTop=C-A+u.offsetTop}l.style.margin="10px 0",l.style.minHeight=t+"px",l.style.maxHeight=h+"px",f?.(),requestAnimationFrame(()=>r.current=!0)}},[q,i.trigger,i.valueNode,l,n,u,v,x,i.dir,f]);(0,w.useLayoutEffect)(()=>z(),[z]);let[A,B]=e.useState();(0,w.useLayoutEffect)(()=>{n&&B(window.getComputedStyle(n).zIndex)},[n]);let C=e.useCallback(a=>{a&&!0===t.current&&(z(),y?.(),t.current=!1)},[z,y]);return(0,d.jsx)(ab,{scope:c,contentWrapper:l,shouldExpandOnScrollRef:r,onScrollButtonChange:C,children:(0,d.jsx)("div",{ref:m,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:A},children:(0,d.jsx)(s.Primitive.div,{...h,ref:p,style:{boxSizing:"border-box",maxHeight:"100%",...h.style}})})})});_.displayName="SelectItemAlignedPosition";var aa=e.forwardRef((a,b)=>{let{__scopeSelect:c,align:e="start",collisionPadding:f=10,...g}=a,h=J(c);return(0,d.jsx)(q.Content,{...h,...g,ref:b,align:e,collisionPadding:f,style:{boxSizing:"border-box",...g.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});aa.displayName="SelectPopperPosition";var[ab,ac]=H(V,{}),ad="SelectViewport",ae=e.forwardRef((a,b)=>{let{__scopeSelect:c,nonce:f,...g}=a,i=Y(ad,c),k=ac(ad,c),l=(0,j.useComposedRefs)(b,i.onViewportChange),m=e.useRef(0);return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:f}),(0,d.jsx)(E.Slot,{scope:c,children:(0,d.jsx)(s.Primitive.div,{"data-radix-select-viewport":"",role:"presentation",...g,ref:l,style:{position:"relative",flex:1,overflow:"hidden auto",...g.style},onScroll:(0,h.composeEventHandlers)(g.onScroll,a=>{let b=a.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:d}=k;if(d?.current&&c){let a=Math.abs(m.current-b.scrollTop);if(a>0){let d=window.innerHeight-20,e=Math.max(parseFloat(c.style.minHeight),parseFloat(c.style.height));if(e<d){let f=e+a,g=Math.min(d,f),h=f-g;c.style.height=g+"px","0px"===c.style.bottom&&(b.scrollTop=h>0?h:0,c.style.justifyContent="flex-end")}}}m.current=b.scrollTop})})})]})});ae.displayName=ad;var af="SelectGroup",[ag,ah]=H(af),ai=e.forwardRef((a,b)=>{let{__scopeSelect:c,...e}=a,f=(0,p.useId)();return(0,d.jsx)(ag,{scope:c,id:f,children:(0,d.jsx)(s.Primitive.div,{role:"group","aria-labelledby":f,...e,ref:b})})});ai.displayName=af;var aj="SelectLabel",ak=e.forwardRef((a,b)=>{let{__scopeSelect:c,...e}=a,f=ah(aj,c);return(0,d.jsx)(s.Primitive.div,{id:f.id,...e,ref:b})});ak.displayName=aj;var al="SelectItem",[am,an]=H(al),ao=e.forwardRef((a,b)=>{let{__scopeSelect:c,value:f,disabled:g=!1,textValue:i,...k}=a,l=L(al,c),m=Y(al,c),n=l.value===f,[o,q]=e.useState(i??""),[r,t]=e.useState(!1),u=(0,j.useComposedRefs)(b,a=>m.itemRefCallback?.(a,f,g)),v=(0,p.useId)(),w=e.useRef("touch"),x=()=>{g||(l.onValueChange(f),l.onOpenChange(!1))};if(""===f)throw Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return(0,d.jsx)(am,{scope:c,value:f,disabled:g,textId:v,isSelected:n,onItemTextChange:e.useCallback(a=>{q(b=>b||(a?.textContent??"").trim())},[]),children:(0,d.jsx)(E.ItemSlot,{scope:c,value:f,disabled:g,textValue:o,children:(0,d.jsx)(s.Primitive.div,{role:"option","aria-labelledby":v,"data-highlighted":r?"":void 0,"aria-selected":n&&r,"data-state":n?"checked":"unchecked","aria-disabled":g||void 0,"data-disabled":g?"":void 0,tabIndex:g?void 0:-1,...k,ref:u,onFocus:(0,h.composeEventHandlers)(k.onFocus,()=>t(!0)),onBlur:(0,h.composeEventHandlers)(k.onBlur,()=>t(!1)),onClick:(0,h.composeEventHandlers)(k.onClick,()=>{"mouse"!==w.current&&x()}),onPointerUp:(0,h.composeEventHandlers)(k.onPointerUp,()=>{"mouse"===w.current&&x()}),onPointerDown:(0,h.composeEventHandlers)(k.onPointerDown,a=>{w.current=a.pointerType}),onPointerMove:(0,h.composeEventHandlers)(k.onPointerMove,a=>{w.current=a.pointerType,g?m.onItemLeave?.():"mouse"===w.current&&a.currentTarget.focus({preventScroll:!0})}),onPointerLeave:(0,h.composeEventHandlers)(k.onPointerLeave,a=>{a.currentTarget===document.activeElement&&m.onItemLeave?.()}),onKeyDown:(0,h.composeEventHandlers)(k.onKeyDown,a=>{(m.searchRef?.current===""||" "!==a.key)&&(C.includes(a.key)&&x()," "===a.key&&a.preventDefault())})})})})});ao.displayName=al;var ap="SelectItemText",aq=e.forwardRef((a,b)=>{let{__scopeSelect:c,className:g,style:h,...i}=a,k=L(ap,c),l=Y(ap,c),m=an(ap,c),n=N(ap,c),[o,p]=e.useState(null),q=(0,j.useComposedRefs)(b,a=>p(a),m.onItemTextChange,a=>l.itemTextRefCallback?.(a,m.value,m.disabled)),r=o?.textContent,t=e.useMemo(()=>(0,d.jsx)("option",{value:m.value,disabled:m.disabled,children:r},m.value),[m.disabled,m.value,r]),{onNativeOptionAdd:u,onNativeOptionRemove:v}=n;return(0,w.useLayoutEffect)(()=>(u(t),()=>v(t)),[u,v,t]),(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(s.Primitive.span,{id:m.textId,...i,ref:q}),m.isSelected&&k.valueNode&&!k.valueNodeHasChildren?f.createPortal(i.children,k.valueNode):null]})});aq.displayName=ap;var ar="SelectItemIndicator",as=e.forwardRef((a,b)=>{let{__scopeSelect:c,...e}=a;return an(ar,c).isSelected?(0,d.jsx)(s.Primitive.span,{"aria-hidden":!0,...e,ref:b}):null});as.displayName=ar;var at="SelectScrollUpButton",au=e.forwardRef((a,b)=>{let c=Y(at,a.__scopeSelect),f=ac(at,a.__scopeSelect),[g,h]=e.useState(!1),i=(0,j.useComposedRefs)(b,f.onScrollButtonChange);return(0,w.useLayoutEffect)(()=>{if(c.viewport&&c.isPositioned){let a=function(){h(b.scrollTop>0)},b=c.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[c.viewport,c.isPositioned]),g?(0,d.jsx)(ax,{...a,ref:i,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=c;a&&b&&(a.scrollTop=a.scrollTop-b.offsetHeight)}}):null});au.displayName=at;var av="SelectScrollDownButton",aw=e.forwardRef((a,b)=>{let c=Y(av,a.__scopeSelect),f=ac(av,a.__scopeSelect),[g,h]=e.useState(!1),i=(0,j.useComposedRefs)(b,f.onScrollButtonChange);return(0,w.useLayoutEffect)(()=>{if(c.viewport&&c.isPositioned){let a=function(){let a=b.scrollHeight-b.clientHeight;h(Math.ceil(b.scrollTop)<a)},b=c.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[c.viewport,c.isPositioned]),g?(0,d.jsx)(ax,{...a,ref:i,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=c;a&&b&&(a.scrollTop=a.scrollTop+b.offsetHeight)}}):null});aw.displayName=av;var ax=e.forwardRef((a,b)=>{let{__scopeSelect:c,onAutoScroll:f,...g}=a,i=Y("SelectScrollButton",c),j=e.useRef(null),k=F(c),l=e.useCallback(()=>{null!==j.current&&(window.clearInterval(j.current),j.current=null)},[]);return e.useEffect(()=>()=>l(),[l]),(0,w.useLayoutEffect)(()=>{let a=k().find(a=>a.ref.current===document.activeElement);a?.ref.current?.scrollIntoView({block:"nearest"})},[k]),(0,d.jsx)(s.Primitive.div,{"aria-hidden":!0,...g,ref:b,style:{flexShrink:0,...g.style},onPointerDown:(0,h.composeEventHandlers)(g.onPointerDown,()=>{null===j.current&&(j.current=window.setInterval(f,50))}),onPointerMove:(0,h.composeEventHandlers)(g.onPointerMove,()=>{i.onItemLeave?.(),null===j.current&&(j.current=window.setInterval(f,50))}),onPointerLeave:(0,h.composeEventHandlers)(g.onPointerLeave,()=>{l()})})}),ay=e.forwardRef((a,b)=>{let{__scopeSelect:c,...e}=a;return(0,d.jsx)(s.Primitive.div,{"aria-hidden":!0,...e,ref:b})});ay.displayName="SelectSeparator";var az="SelectArrow",aA=e.forwardRef((a,b)=>{let{__scopeSelect:c,...e}=a,f=J(c),g=L(az,c),h=Y(az,c);return g.open&&"popper"===h.position?(0,d.jsx)(q.Arrow,{...f,...e,ref:b}):null});aA.displayName=az;var aB=e.forwardRef(({__scopeSelect:a,value:b,...c},f)=>{let g=e.useRef(null),h=(0,j.useComposedRefs)(f,g),i=(0,x.usePrevious)(b);return e.useEffect(()=>{let a=g.current;if(!a)return;let c=Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype,"value").set;if(i!==b&&c){let d=new Event("change",{bubbles:!0});c.call(a,b),a.dispatchEvent(d)}},[i,b]),(0,d.jsx)(s.Primitive.select,{...c,style:{...y.VISUALLY_HIDDEN_STYLES,...c.style},ref:h,defaultValue:b})});function aC(a){return""===a||void 0===a}function aD(a){let b=(0,u.useCallbackRef)(a),c=e.useRef(""),d=e.useRef(0),f=e.useCallback(a=>{let e=c.current+a;b(e),function a(b){c.current=b,window.clearTimeout(d.current),""!==b&&(d.current=window.setTimeout(()=>a(""),1e3))}(e)},[b]),g=e.useCallback(()=>{c.current="",window.clearTimeout(d.current)},[]);return e.useEffect(()=>()=>window.clearTimeout(d.current),[]),[c,f,g]}function aE(a,b,c){var d,e;let f=b.length>1&&Array.from(b).every(a=>a===b[0])?b[0]:b,g=c?a.indexOf(c):-1,h=(d=a,e=Math.max(g,0),d.map((a,b)=>d[(e+b)%d.length]));1===f.length&&(h=h.filter(a=>a!==c));let i=h.find(a=>a.textValue.toLowerCase().startsWith(f.toLowerCase()));return i!==c?i:void 0}aB.displayName="SelectBubbleInput",a.s(["Arrow",()=>aA,"Content",()=>W,"Group",()=>ai,"Icon",()=>T,"Item",()=>ao,"ItemIndicator",()=>as,"ItemText",()=>aq,"Label",()=>ak,"Portal",()=>U,"Root",()=>O,"ScrollDownButton",()=>aw,"ScrollUpButton",()=>au,"Select",()=>O,"SelectArrow",()=>aA,"SelectContent",()=>W,"SelectGroup",()=>ai,"SelectIcon",()=>T,"SelectItem",()=>ao,"SelectItemIndicator",()=>as,"SelectItemText",()=>aq,"SelectLabel",()=>ak,"SelectPortal",()=>U,"SelectScrollDownButton",()=>aw,"SelectScrollUpButton",()=>au,"SelectSeparator",()=>ay,"SelectTrigger",()=>Q,"SelectValue",()=>S,"SelectViewport",()=>ae,"Separator",()=>ay,"Trigger",()=>Q,"Value",()=>S,"Viewport",()=>ae,"createSelectScope",()=>I],16252);var aF=a.i(16252),aF=aF,aG=a.i(72016),aH=a.i(71716);let aI=(0,b.default)("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);var aJ=a.i(85536);let aK=aF.Root;aF.Group;let aL=aF.Value,aM=e.forwardRef(({className:a,children:b,...c},e)=>(0,d.jsxs)(aF.Trigger,{ref:e,className:(0,aJ.cn)("border-input ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-sm focus:ring-1 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",a),...c,children:[b,(0,d.jsx)(aF.Icon,{asChild:!0,children:(0,d.jsx)(aH.ChevronDown,{className:"h-4 w-4 opacity-50"})})]}));aM.displayName=aF.Trigger.displayName;let aN=e.forwardRef(({className:a,...b},c)=>(0,d.jsx)(aF.ScrollUpButton,{ref:c,className:(0,aJ.cn)("flex cursor-default items-center justify-center py-1",a),...b,children:(0,d.jsx)(aI,{className:"h-4 w-4"})}));aN.displayName=aF.ScrollUpButton.displayName;let aO=e.forwardRef(({className:a,...b},c)=>(0,d.jsx)(aF.ScrollDownButton,{ref:c,className:(0,aJ.cn)("flex cursor-default items-center justify-center py-1",a),...b,children:(0,d.jsx)(aH.ChevronDown,{className:"h-4 w-4"})}));aO.displayName=aF.ScrollDownButton.displayName;let aP=e.forwardRef(({className:a,children:b,position:c="popper",...e},f)=>(0,d.jsx)(aF.Portal,{children:(0,d.jsxs)(aF.Content,{ref:f,className:(0,aJ.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md","popper"===c&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:c,...e,children:[(0,d.jsx)(aN,{}),(0,d.jsx)(aF.Viewport,{className:(0,aJ.cn)("p-1","popper"===c&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:b}),(0,d.jsx)(aO,{})]})}));aP.displayName=aF.Content.displayName,e.forwardRef(({className:a,...b},c)=>(0,d.jsx)(aF.Label,{ref:c,className:(0,aJ.cn)("px-2 py-1.5 text-sm font-semibold",a),...b})).displayName=aF.Label.displayName;let aQ=e.forwardRef(({className:a,children:b,...c},e)=>(0,d.jsxs)(aF.Item,{ref:e,className:(0,aJ.cn)("focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default items-center rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50",a),...c,children:[(0,d.jsx)("span",{className:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,d.jsx)(aF.ItemIndicator,{children:(0,d.jsx)(aG.Check,{className:"h-4 w-4"})})}),(0,d.jsx)(aF.ItemText,{children:b})]}));aQ.displayName=aF.Item.displayName,e.forwardRef(({className:a,...b},c)=>(0,d.jsx)(aF.Separator,{ref:c,className:(0,aJ.cn)("bg-muted -mx-1 my-1 h-px",a),...b})).displayName=aF.Separator.displayName,a.s(["Select",()=>aK,"SelectContent",()=>aP,"SelectItem",()=>aQ,"SelectTrigger",()=>aM,"SelectValue",()=>aL],59175)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=7f428_lucide-react_dist_esm_icons_activity_22f9667f.js.map
|