@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,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/app/api/webhooks/deliveries/route.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsB7D"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Webhook Delivery History: GET /api/webhooks/deliveries
|
|
3
|
-
*
|
|
4
|
-
* Returns recent webhook delivery records with optional filtering.
|
|
5
|
-
* Query params: ?status=success|error|ignored&eventType=pull_request&limit=50
|
|
6
|
-
*/
|
|
7
|
-
import { hasWebhookManager, getWebhookManager, } from '../../../../../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.js';
|
|
8
|
-
export const dynamic = 'force-dynamic';
|
|
9
|
-
export async function GET(request) {
|
|
10
|
-
if (!hasWebhookManager()) {
|
|
11
|
-
return Response.json({ deliveries: [] });
|
|
12
|
-
}
|
|
13
|
-
const url = new URL(request.url);
|
|
14
|
-
const statusFilter = url.searchParams.get('status');
|
|
15
|
-
const eventTypeFilter = url.searchParams.get('eventType');
|
|
16
|
-
const limitParam = url.searchParams.get('limit');
|
|
17
|
-
const limit = limitParam ? Math.min(parseInt(limitParam, 10) || 50, 200) : 50;
|
|
18
|
-
const manager = getWebhookManager();
|
|
19
|
-
let deliveries = [...manager.getDeliveryHistory()];
|
|
20
|
-
if (statusFilter) {
|
|
21
|
-
deliveries = deliveries.filter((d) => d.status === statusFilter);
|
|
22
|
-
}
|
|
23
|
-
if (eventTypeFilter) {
|
|
24
|
-
deliveries = deliveries.filter((d) => d.eventType === eventTypeFilter);
|
|
25
|
-
}
|
|
26
|
-
return Response.json({ deliveries: deliveries.slice(0, limit) });
|
|
27
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GitHub Webhook Receiver: POST /api/webhooks/github
|
|
3
|
-
*
|
|
4
|
-
* Receives webhook events from GitHub, validates the HMAC-SHA256 signature,
|
|
5
|
-
* and routes the event to the GitHubWebhookService for processing.
|
|
6
|
-
*
|
|
7
|
-
* This endpoint is exposed via a Cloudflare Tunnel so GitHub can reach it.
|
|
8
|
-
* Only POST requests are accepted; all other methods return 405.
|
|
9
|
-
*/
|
|
10
|
-
export declare const dynamic = "force-dynamic";
|
|
11
|
-
export declare function POST(request: Request): Promise<Response>;
|
|
12
|
-
/**
|
|
13
|
-
* Health check: GET /api/webhooks/github
|
|
14
|
-
* Returns whether the webhook system is active.
|
|
15
|
-
*/
|
|
16
|
-
export declare function GET(): Promise<Response>;
|
|
17
|
-
//# sourceMappingURL=route.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/app/api/webhooks/github/route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAAsB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsD9D;AAED;;;GAGG;AACH,wBAAsB,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAS7C"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GitHub Webhook Receiver: POST /api/webhooks/github
|
|
3
|
-
*
|
|
4
|
-
* Receives webhook events from GitHub, validates the HMAC-SHA256 signature,
|
|
5
|
-
* and routes the event to the GitHubWebhookService for processing.
|
|
6
|
-
*
|
|
7
|
-
* This endpoint is exposed via a Cloudflare Tunnel so GitHub can reach it.
|
|
8
|
-
* Only POST requests are accepted; all other methods return 405.
|
|
9
|
-
*/
|
|
10
|
-
import { resolve } from '../../../../lib/server-container.js';
|
|
11
|
-
import { hasWebhookManager } from '../../../../../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.js';
|
|
12
|
-
export const dynamic = 'force-dynamic';
|
|
13
|
-
export async function POST(request) {
|
|
14
|
-
// Verify webhook system is running
|
|
15
|
-
if (!hasWebhookManager()) {
|
|
16
|
-
return Response.json({ error: 'Webhook system not initialized' }, { status: 503 });
|
|
17
|
-
}
|
|
18
|
-
// Read raw body for signature validation
|
|
19
|
-
const rawBody = await request.text();
|
|
20
|
-
if (!rawBody) {
|
|
21
|
-
return Response.json({ error: 'Empty request body' }, { status: 400 });
|
|
22
|
-
}
|
|
23
|
-
// Get the webhook service from DI container
|
|
24
|
-
let webhookService;
|
|
25
|
-
try {
|
|
26
|
-
webhookService = resolve('IWebhookService');
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
return Response.json({ error: 'Webhook service not available' }, { status: 503 });
|
|
30
|
-
}
|
|
31
|
-
// Validate GitHub signature
|
|
32
|
-
const signature = request.headers.get('x-hub-signature-256') ?? '';
|
|
33
|
-
const validation = webhookService.validateSignature(rawBody, signature, webhookService.getSecret());
|
|
34
|
-
if (!validation.valid) {
|
|
35
|
-
// eslint-disable-next-line no-console
|
|
36
|
-
console.warn(`[WebhookRoute] Invalid signature: ${validation.error}`);
|
|
37
|
-
return Response.json({ error: `Invalid signature: ${validation.error}` }, { status: 401 });
|
|
38
|
-
}
|
|
39
|
-
// Parse the event
|
|
40
|
-
const eventType = request.headers.get('x-github-event') ?? 'unknown';
|
|
41
|
-
const deliveryId = request.headers.get('x-github-delivery') ?? 'unknown';
|
|
42
|
-
let payload;
|
|
43
|
-
try {
|
|
44
|
-
payload = JSON.parse(rawBody);
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
return Response.json({ error: 'Invalid JSON payload' }, { status: 400 });
|
|
48
|
-
}
|
|
49
|
-
// Process the event asynchronously (respond immediately to GitHub)
|
|
50
|
-
void webhookService.handleEvent({
|
|
51
|
-
source: 'github',
|
|
52
|
-
eventType,
|
|
53
|
-
deliveryId,
|
|
54
|
-
payload,
|
|
55
|
-
});
|
|
56
|
-
return Response.json({ received: true, deliveryId });
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Health check: GET /api/webhooks/github
|
|
60
|
-
* Returns whether the webhook system is active.
|
|
61
|
-
*/
|
|
62
|
-
export async function GET() {
|
|
63
|
-
const active = hasWebhookManager();
|
|
64
|
-
return Response.json({
|
|
65
|
-
active,
|
|
66
|
-
message: active
|
|
67
|
-
? 'Webhook receiver is active'
|
|
68
|
-
: 'Webhook system not initialized (cloudflared may not be installed)',
|
|
69
|
-
});
|
|
70
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Webhook System Status: GET /api/webhooks/status
|
|
3
|
-
*
|
|
4
|
-
* Returns the full webhook system status including tunnel state,
|
|
5
|
-
* registered webhooks, and delivery statistics.
|
|
6
|
-
*/
|
|
7
|
-
export declare const dynamic = "force-dynamic";
|
|
8
|
-
export declare function GET(): Promise<Response>;
|
|
9
|
-
//# sourceMappingURL=route.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../../../src/presentation/web/app/api/webhooks/status/route.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAAsB,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAkB7C"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Webhook System Status: GET /api/webhooks/status
|
|
3
|
-
*
|
|
4
|
-
* Returns the full webhook system status including tunnel state,
|
|
5
|
-
* registered webhooks, and delivery statistics.
|
|
6
|
-
*/
|
|
7
|
-
import { hasWebhookManager, getWebhookManager, } from '../../../../../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.js';
|
|
8
|
-
export const dynamic = 'force-dynamic';
|
|
9
|
-
export async function GET() {
|
|
10
|
-
if (!hasWebhookManager()) {
|
|
11
|
-
return Response.json({
|
|
12
|
-
running: false,
|
|
13
|
-
tunnel: { connected: false, publicUrl: null },
|
|
14
|
-
webhooks: {
|
|
15
|
-
registered: [],
|
|
16
|
-
totalDeliveries: 0,
|
|
17
|
-
successCount: 0,
|
|
18
|
-
errorCount: 0,
|
|
19
|
-
ignoredCount: 0,
|
|
20
|
-
},
|
|
21
|
-
startedAt: null,
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
const manager = getWebhookManager();
|
|
25
|
-
return Response.json(manager.getStatus());
|
|
26
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/webhooks/page.tsx"],"names":[],"mappings":"AAGA,uEAAuE;AACvE,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,wBAA8B,YAAY,qDAQzC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { loadWebhookStatus } from '../actions/load-webhook-status.js';
|
|
3
|
-
import { WebhooksPageClient } from '../../components/features/webhooks/webhooks-page-client.js';
|
|
4
|
-
/** Skip static pre-rendering since we need runtime webhook manager. */
|
|
5
|
-
export const dynamic = 'force-dynamic';
|
|
6
|
-
export default async function WebhooksPage() {
|
|
7
|
-
const status = await loadWebhookStatus();
|
|
8
|
-
return (_jsx("div", { className: "flex h-full flex-col px-6 pb-6", children: _jsx(WebhooksPageClient, { initialStatus: status }) }));
|
|
9
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
export type WebhookDeliveryStatus = 'success' | 'ignored' | 'error';
|
|
2
|
-
export interface WebhookDeliveryRecord {
|
|
3
|
-
deliveryId: string;
|
|
4
|
-
eventType: string;
|
|
5
|
-
source: string;
|
|
6
|
-
receivedAt: string;
|
|
7
|
-
status: WebhookDeliveryStatus;
|
|
8
|
-
statusMessage: string;
|
|
9
|
-
durationMs: number;
|
|
10
|
-
payload: Record<string, unknown>;
|
|
11
|
-
}
|
|
12
|
-
export interface RegisteredWebhookInfo {
|
|
13
|
-
repoFullName: string;
|
|
14
|
-
webhookId: number;
|
|
15
|
-
repositoryPath: string;
|
|
16
|
-
}
|
|
17
|
-
export interface WebhookSystemStatus {
|
|
18
|
-
running: boolean;
|
|
19
|
-
tunnel: {
|
|
20
|
-
connected: boolean;
|
|
21
|
-
publicUrl: string | null;
|
|
22
|
-
};
|
|
23
|
-
webhooks: {
|
|
24
|
-
registered: readonly RegisteredWebhookInfo[];
|
|
25
|
-
totalDeliveries: number;
|
|
26
|
-
successCount: number;
|
|
27
|
-
errorCount: number;
|
|
28
|
-
ignoredCount: number;
|
|
29
|
-
};
|
|
30
|
-
startedAt: string | null;
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE;QACN,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IACF,QAAQ,EAAE;QACR,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;QAC7C,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { WebhookDeliveryRecord } from './types.js';
|
|
2
|
-
export interface WebhookDeliveryTableProps {
|
|
3
|
-
deliveries: WebhookDeliveryRecord[];
|
|
4
|
-
}
|
|
5
|
-
export declare function WebhookDeliveryTable({ deliveries }: WebhookDeliveryTableProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
-
//# sourceMappingURL=webhook-delivery-table.d.ts.map
|
package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-delivery-table.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhook-delivery-table.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,qBAAqB,EAAyB,MAAM,SAAS,CAAC;AAE5E,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,qBAAqB,EAAE,CAAC;CACrC;AAcD,wBAAgB,oBAAoB,CAAC,EAAE,UAAU,EAAE,EAAE,yBAAyB,2CAsE7E"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState } from 'react';
|
|
4
|
-
import { CheckCircle, XCircle, MinusCircle, ChevronDown, ChevronRight } from 'lucide-react';
|
|
5
|
-
import { Card, CardContent, CardHeader, CardTitle } from '../../ui/card.js';
|
|
6
|
-
import { Badge } from '../../ui/badge.js';
|
|
7
|
-
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../ui/select.js';
|
|
8
|
-
import { cn } from '../../../lib/utils.js';
|
|
9
|
-
const STATUS_ICON = {
|
|
10
|
-
success: _jsx(CheckCircle, { className: "h-4 w-4 text-green-500" }),
|
|
11
|
-
error: _jsx(XCircle, { className: "h-4 w-4 text-red-500" }),
|
|
12
|
-
ignored: _jsx(MinusCircle, { className: "h-4 w-4 text-yellow-500" }),
|
|
13
|
-
};
|
|
14
|
-
const STATUS_LABEL = {
|
|
15
|
-
success: 'Success',
|
|
16
|
-
error: 'Error',
|
|
17
|
-
ignored: 'Ignored',
|
|
18
|
-
};
|
|
19
|
-
export function WebhookDeliveryTable({ deliveries }) {
|
|
20
|
-
const [statusFilter, setStatusFilter] = useState('all');
|
|
21
|
-
const [eventTypeFilter, setEventTypeFilter] = useState('all');
|
|
22
|
-
const [expandedId, setExpandedId] = useState(null);
|
|
23
|
-
const eventTypes = [...new Set(deliveries.map((d) => d.eventType))];
|
|
24
|
-
const filtered = deliveries.filter((d) => {
|
|
25
|
-
if (statusFilter !== 'all' && d.status !== statusFilter)
|
|
26
|
-
return false;
|
|
27
|
-
if (eventTypeFilter !== 'all' && d.eventType !== eventTypeFilter)
|
|
28
|
-
return false;
|
|
29
|
-
return true;
|
|
30
|
-
});
|
|
31
|
-
return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs(CardTitle, { className: "text-sm font-medium", children: ["Delivery History (", filtered.length, ")"] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Select, { value: statusFilter, onValueChange: setStatusFilter, children: [_jsx(SelectTrigger, { className: "h-8 w-[120px]", children: _jsx(SelectValue, { placeholder: "Status" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "all", children: "All Status" }), _jsx(SelectItem, { value: "success", children: "Success" }), _jsx(SelectItem, { value: "error", children: "Error" }), _jsx(SelectItem, { value: "ignored", children: "Ignored" })] })] }), _jsxs(Select, { value: eventTypeFilter, onValueChange: setEventTypeFilter, children: [_jsx(SelectTrigger, { className: "h-8 w-[150px]", children: _jsx(SelectValue, { placeholder: "Event Type" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "all", children: "All Events" }), eventTypes.map((type) => (_jsx(SelectItem, { value: type, children: type }, type)))] })] })] })] }) }), _jsx(CardContent, { children: filtered.length === 0 ? (_jsx("p", { className: "text-muted-foreground py-8 text-center text-sm", children: "No delivery records yet. Webhook events will appear here when received." })) : (_jsx("div", { className: "space-y-1", children: filtered.map((delivery) => (_jsx(DeliveryRow, { delivery: delivery, expanded: expandedId === delivery.deliveryId, onToggle: () => setExpandedId(expandedId === delivery.deliveryId ? null : delivery.deliveryId) }, delivery.deliveryId))) })) })] }));
|
|
32
|
-
}
|
|
33
|
-
function DeliveryRow({ delivery, expanded, onToggle, }) {
|
|
34
|
-
const time = new Date(delivery.receivedAt);
|
|
35
|
-
const timeStr = time.toLocaleTimeString();
|
|
36
|
-
const dateStr = time.toLocaleDateString();
|
|
37
|
-
return (_jsxs("div", { className: cn('rounded-lg border', expanded && 'bg-muted/50'), children: [_jsxs("button", { type: "button", className: "flex w-full items-center gap-3 px-3 py-2 text-left text-sm", onClick: onToggle, children: [expanded ? (_jsx(ChevronDown, { className: "h-4 w-4 shrink-0" })) : (_jsx(ChevronRight, { className: "h-4 w-4 shrink-0" })), STATUS_ICON[delivery.status], _jsx(Badge, { variant: "outline", className: "text-xs", children: delivery.eventType }), _jsx("span", { className: "text-muted-foreground min-w-0 flex-1 truncate text-xs", children: delivery.deliveryId }), _jsxs("span", { className: "text-muted-foreground shrink-0 text-xs", children: [delivery.durationMs, "ms"] }), _jsx("span", { className: "text-muted-foreground shrink-0 text-xs", children: timeStr })] }), expanded ? (_jsxs("div", { className: "border-t px-3 py-3", children: [_jsxs("div", { className: "mb-2 grid grid-cols-2 gap-2 text-xs", children: [_jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground", children: "Status:" }), ' ', _jsx(Badge, { variant: delivery.status === 'error' ? 'destructive' : 'secondary', className: "text-xs", children: STATUS_LABEL[delivery.status] })] }), _jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground", children: "Date:" }), " ", dateStr, " ", timeStr] }), _jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground", children: "Duration:" }), " ", delivery.durationMs, "ms"] }), _jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground", children: "Source:" }), " ", delivery.source] })] }), _jsxs("div", { className: "mb-2", children: [_jsx("span", { className: "text-muted-foreground text-xs", children: "Message:" }), _jsx("p", { className: "text-sm", children: delivery.statusMessage })] }), _jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground text-xs", children: "Payload:" }), _jsx("pre", { className: "bg-muted mt-1 max-h-60 overflow-auto rounded-md p-2 text-xs", children: JSON.stringify(delivery.payload, null, 2) })] })] })) : null] }));
|
|
38
|
-
}
|
package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { WebhookDeliveryTable } from './webhook-delivery-table.js';
|
|
3
|
-
declare const meta: Meta<typeof WebhookDeliveryTable>;
|
|
4
|
-
export default meta;
|
|
5
|
-
type Story = StoryObj<typeof meta>;
|
|
6
|
-
export declare const WithDeliveries: Story;
|
|
7
|
-
export declare const Empty: Story;
|
|
8
|
-
export declare const OnlyErrors: Story;
|
|
9
|
-
//# sourceMappingURL=webhook-delivery-table.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-delivery-table.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAwDhE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,oBAAoB,CAK3C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,cAAc,EAAE,KAE5B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC"}
|
package/dist/src/presentation/web/components/features/webhooks/webhook-delivery-table.stories.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { WebhookDeliveryTable } from './webhook-delivery-table.js';
|
|
2
|
-
const mockDeliveries = [
|
|
3
|
-
{
|
|
4
|
-
deliveryId: 'abc-123-def',
|
|
5
|
-
eventType: 'pull_request',
|
|
6
|
-
source: 'github',
|
|
7
|
-
receivedAt: new Date(Date.now() - 60000).toISOString(),
|
|
8
|
-
status: 'success',
|
|
9
|
-
statusMessage: 'Processed successfully',
|
|
10
|
-
durationMs: 12,
|
|
11
|
-
payload: {
|
|
12
|
-
action: 'closed',
|
|
13
|
-
pull_request: {
|
|
14
|
-
number: 42,
|
|
15
|
-
merged: true,
|
|
16
|
-
html_url: 'https://github.com/acme/web-app/pull/42',
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
deliveryId: 'abc-456-ghi',
|
|
22
|
-
eventType: 'check_suite',
|
|
23
|
-
source: 'github',
|
|
24
|
-
receivedAt: new Date(Date.now() - 120000).toISOString(),
|
|
25
|
-
status: 'success',
|
|
26
|
-
statusMessage: 'Processed successfully',
|
|
27
|
-
durationMs: 8,
|
|
28
|
-
payload: {
|
|
29
|
-
action: 'completed',
|
|
30
|
-
check_suite: { conclusion: 'success', head_branch: 'feat/login' },
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
deliveryId: 'abc-789-jkl',
|
|
35
|
-
eventType: 'check_run',
|
|
36
|
-
source: 'github',
|
|
37
|
-
receivedAt: new Date(Date.now() - 180000).toISOString(),
|
|
38
|
-
status: 'error',
|
|
39
|
-
statusMessage: 'Feature not found for branch refs/heads/unknown',
|
|
40
|
-
durationMs: 3,
|
|
41
|
-
payload: { action: 'completed', check_run: { conclusion: 'failure' } },
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
deliveryId: 'abc-012-mno',
|
|
45
|
-
eventType: 'ping',
|
|
46
|
-
source: 'github',
|
|
47
|
-
receivedAt: new Date(Date.now() - 240000).toISOString(),
|
|
48
|
-
status: 'ignored',
|
|
49
|
-
statusMessage: 'Unhandled event type: ping',
|
|
50
|
-
durationMs: 0,
|
|
51
|
-
payload: { zen: 'Keep it logically awesome.' },
|
|
52
|
-
},
|
|
53
|
-
];
|
|
54
|
-
const meta = {
|
|
55
|
-
title: 'Features/Webhooks/WebhookDeliveryTable',
|
|
56
|
-
component: WebhookDeliveryTable,
|
|
57
|
-
parameters: { layout: 'padded' },
|
|
58
|
-
tags: ['autodocs'],
|
|
59
|
-
};
|
|
60
|
-
export default meta;
|
|
61
|
-
export const WithDeliveries = {
|
|
62
|
-
args: { deliveries: mockDeliveries },
|
|
63
|
-
};
|
|
64
|
-
export const Empty = {
|
|
65
|
-
args: { deliveries: [] },
|
|
66
|
-
};
|
|
67
|
-
export const OnlyErrors = {
|
|
68
|
-
args: { deliveries: mockDeliveries.filter((d) => d.status === 'error') },
|
|
69
|
-
};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { RegisteredWebhookInfo } from './types.js';
|
|
2
|
-
export interface WebhookRepoListProps {
|
|
3
|
-
webhooks: readonly RegisteredWebhookInfo[];
|
|
4
|
-
tunnelUrl: string | null;
|
|
5
|
-
}
|
|
6
|
-
export declare function WebhookRepoList({ webhooks, tunnelUrl }: WebhookRepoListProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
-
//# sourceMappingURL=webhook-repo-list.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-repo-list.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhook-repo-list.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC3C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CA2D5E"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { GitBranch, ExternalLink } from 'lucide-react';
|
|
4
|
-
import { Card, CardContent, CardHeader, CardTitle } from '../../ui/card.js';
|
|
5
|
-
import { Badge } from '../../ui/badge.js';
|
|
6
|
-
export function WebhookRepoList({ webhooks, tunnelUrl }) {
|
|
7
|
-
if (webhooks.length === 0) {
|
|
8
|
-
return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { className: "text-sm font-medium", children: "Registered Repositories" }) }), _jsx(CardContent, { children: _jsx("p", { className: "text-muted-foreground text-sm", children: "No webhooks registered. Webhooks are automatically created for repositories with features in the Review lifecycle when cloudflared is available." }) })] }));
|
|
9
|
-
}
|
|
10
|
-
return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs(CardTitle, { className: "text-sm font-medium", children: ["Registered Repositories (", webhooks.length, ")"] }) }), _jsx(CardContent, { children: _jsx("div", { className: "space-y-3", children: webhooks.map((webhook) => (_jsxs("div", { className: "flex items-center justify-between rounded-lg border p-3", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(GitBranch, { className: "text-muted-foreground h-4 w-4" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium", children: webhook.repoFullName }), _jsxs("p", { className: "text-muted-foreground text-xs", children: ["Webhook #", webhook.webhookId] })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", className: "text-xs", children: "Active" }), tunnelUrl ? (_jsx("a", { href: `https://github.com/${webhook.repoFullName}/settings/hooks/${webhook.webhookId}`, target: "_blank", rel: "noopener noreferrer", className: "text-muted-foreground hover:text-foreground", children: _jsx(ExternalLink, { className: "h-3.5 w-3.5" }) })) : null] })] }, webhook.webhookId))) }) })] }));
|
|
11
|
-
}
|
package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { WebhookRepoList } from './webhook-repo-list.js';
|
|
3
|
-
declare const meta: Meta<typeof WebhookRepoList>;
|
|
4
|
-
export default meta;
|
|
5
|
-
type Story = StoryObj<typeof meta>;
|
|
6
|
-
export declare const WithWebhooks: Story;
|
|
7
|
-
export declare const Empty: Story;
|
|
8
|
-
export declare const SingleRepo: Story;
|
|
9
|
-
//# sourceMappingURL=webhook-repo-list.stories.d.ts.map
|
package/dist/src/presentation/web/components/features/webhooks/webhook-repo-list.stories.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-repo-list.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhook-repo-list.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAQtD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAKtC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,YAAY,EAAE,KAK1B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { WebhookRepoList } from './webhook-repo-list.js';
|
|
2
|
-
const mockWebhooks = [
|
|
3
|
-
{ repoFullName: 'acme/web-app', webhookId: 12345, repositoryPath: '/home/user/web-app' },
|
|
4
|
-
{ repoFullName: 'acme/api-service', webhookId: 12346, repositoryPath: '/home/user/api-service' },
|
|
5
|
-
{ repoFullName: 'acme/shared-lib', webhookId: 12347, repositoryPath: '/home/user/shared-lib' },
|
|
6
|
-
];
|
|
7
|
-
const meta = {
|
|
8
|
-
title: 'Features/Webhooks/WebhookRepoList',
|
|
9
|
-
component: WebhookRepoList,
|
|
10
|
-
parameters: { layout: 'padded' },
|
|
11
|
-
tags: ['autodocs'],
|
|
12
|
-
};
|
|
13
|
-
export default meta;
|
|
14
|
-
export const WithWebhooks = {
|
|
15
|
-
args: {
|
|
16
|
-
webhooks: mockWebhooks,
|
|
17
|
-
tunnelUrl: 'https://random-subdomain.trycloudflare.com',
|
|
18
|
-
},
|
|
19
|
-
};
|
|
20
|
-
export const Empty = {
|
|
21
|
-
args: {
|
|
22
|
-
webhooks: [],
|
|
23
|
-
tunnelUrl: null,
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
export const SingleRepo = {
|
|
27
|
-
args: {
|
|
28
|
-
webhooks: [mockWebhooks[0]],
|
|
29
|
-
tunnelUrl: 'https://random-subdomain.trycloudflare.com',
|
|
30
|
-
},
|
|
31
|
-
};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { WebhookSystemStatus } from './types.js';
|
|
2
|
-
export interface WebhookStatusCardsProps {
|
|
3
|
-
status: WebhookSystemStatus;
|
|
4
|
-
}
|
|
5
|
-
export declare function WebhookStatusCards({ status }: WebhookStatusCardsProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
-
//# sourceMappingURL=webhook-status-cards.d.ts.map
|
package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-status-cards.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhook-status-cards.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,2CA2FrE"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Activity, Globe, Webhook, CheckCircle, XCircle, MinusCircle } from 'lucide-react';
|
|
4
|
-
import { Card, CardContent, CardHeader, CardTitle } from '../../ui/card.js';
|
|
5
|
-
import { Badge } from '../../ui/badge.js';
|
|
6
|
-
import { cn } from '../../../lib/utils.js';
|
|
7
|
-
export function WebhookStatusCards({ status }) {
|
|
8
|
-
const uptime = status.startedAt ? formatUptime(new Date(status.startedAt)) : null;
|
|
9
|
-
return (_jsxs("div", { className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4", children: [_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [_jsx(CardTitle, { className: "text-sm font-medium", children: "System Status" }), _jsx(Activity, { className: "text-muted-foreground h-4 w-4" })] }), _jsxs(CardContent, { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: cn('h-2 w-2 rounded-full', status.running ? 'bg-green-500' : 'bg-red-500') }), _jsx("span", { className: "text-2xl font-bold", children: status.running ? 'Active' : 'Inactive' })] }), uptime ? (_jsxs("p", { className: "text-muted-foreground text-xs", children: ["Up for ", uptime] })) : (_jsx("p", { className: "text-muted-foreground text-xs", children: "Webhook system not started" }))] })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [_jsx(CardTitle, { className: "text-sm font-medium", children: "Tunnel" }), _jsx(Globe, { className: "text-muted-foreground h-4 w-4" })] }), _jsxs(CardContent, { children: [_jsx("div", { className: "flex items-center gap-2", children: _jsx(Badge, { variant: status.tunnel.connected ? 'default' : 'destructive', children: status.tunnel.connected ? 'Connected' : 'Disconnected' }) }), status.tunnel.publicUrl ? (_jsx("p", { className: "text-muted-foreground mt-1 truncate text-xs", title: status.tunnel.publicUrl, children: status.tunnel.publicUrl })) : (_jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: "No tunnel URL" }))] })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [_jsx(CardTitle, { className: "text-sm font-medium", children: "Webhooks" }), _jsx(Webhook, { className: "text-muted-foreground h-4 w-4" })] }), _jsxs(CardContent, { children: [_jsx("div", { className: "text-2xl font-bold", children: status.webhooks.registered.length }), _jsxs("p", { className: "text-muted-foreground text-xs", children: [status.webhooks.registered.length === 1 ? 'repository' : 'repositories', " registered"] })] })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [_jsx(CardTitle, { className: "text-sm font-medium", children: "Deliveries" }), _jsx(CheckCircle, { className: "text-muted-foreground h-4 w-4" })] }), _jsxs(CardContent, { children: [_jsx("div", { className: "text-2xl font-bold", children: status.webhooks.totalDeliveries }), _jsxs("div", { className: "text-muted-foreground flex items-center gap-3 text-xs", children: [_jsxs("span", { className: "flex items-center gap-1", children: [_jsx(CheckCircle, { className: "h-3 w-3 text-green-500" }), status.webhooks.successCount] }), _jsxs("span", { className: "flex items-center gap-1", children: [_jsx(XCircle, { className: "h-3 w-3 text-red-500" }), status.webhooks.errorCount] }), _jsxs("span", { className: "flex items-center gap-1", children: [_jsx(MinusCircle, { className: "h-3 w-3 text-yellow-500" }), status.webhooks.ignoredCount] })] })] })] })] }));
|
|
10
|
-
}
|
|
11
|
-
function formatUptime(startedAt) {
|
|
12
|
-
const ms = Date.now() - startedAt.getTime();
|
|
13
|
-
const seconds = Math.floor(ms / 1000);
|
|
14
|
-
const minutes = Math.floor(seconds / 60);
|
|
15
|
-
const hours = Math.floor(minutes / 60);
|
|
16
|
-
if (hours > 0)
|
|
17
|
-
return `${hours}h ${minutes % 60}m`;
|
|
18
|
-
if (minutes > 0)
|
|
19
|
-
return `${minutes}m ${seconds % 60}s`;
|
|
20
|
-
return `${seconds}s`;
|
|
21
|
-
}
|
package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { WebhookStatusCards } from './webhook-status-cards.js';
|
|
3
|
-
declare const meta: Meta<typeof WebhookStatusCards>;
|
|
4
|
-
export default meta;
|
|
5
|
-
type Story = StoryObj<typeof meta>;
|
|
6
|
-
export declare const Active: Story;
|
|
7
|
-
export declare const Inactive: Story;
|
|
8
|
-
export declare const TunnelDisconnected: Story;
|
|
9
|
-
//# sourceMappingURL=webhook-status-cards.stories.d.ts.map
|
package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-status-cards.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhook-status-cards.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAuC5D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,kBAAkB,CAKzC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,MAAM,EAAE,KAEpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC"}
|
package/dist/src/presentation/web/components/features/webhooks/webhook-status-cards.stories.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { WebhookStatusCards } from './webhook-status-cards.js';
|
|
2
|
-
const activeStatus = {
|
|
3
|
-
running: true,
|
|
4
|
-
tunnel: {
|
|
5
|
-
connected: true,
|
|
6
|
-
publicUrl: 'https://random-subdomain.trycloudflare.com',
|
|
7
|
-
},
|
|
8
|
-
webhooks: {
|
|
9
|
-
registered: [
|
|
10
|
-
{ repoFullName: 'acme/web-app', webhookId: 12345, repositoryPath: '/home/user/web-app' },
|
|
11
|
-
{
|
|
12
|
-
repoFullName: 'acme/api-service',
|
|
13
|
-
webhookId: 12346,
|
|
14
|
-
repositoryPath: '/home/user/api-service',
|
|
15
|
-
},
|
|
16
|
-
],
|
|
17
|
-
totalDeliveries: 42,
|
|
18
|
-
successCount: 38,
|
|
19
|
-
errorCount: 2,
|
|
20
|
-
ignoredCount: 2,
|
|
21
|
-
},
|
|
22
|
-
startedAt: new Date(Date.now() - 3600000).toISOString(),
|
|
23
|
-
};
|
|
24
|
-
const inactiveStatus = {
|
|
25
|
-
running: false,
|
|
26
|
-
tunnel: { connected: false, publicUrl: null },
|
|
27
|
-
webhooks: {
|
|
28
|
-
registered: [],
|
|
29
|
-
totalDeliveries: 0,
|
|
30
|
-
successCount: 0,
|
|
31
|
-
errorCount: 0,
|
|
32
|
-
ignoredCount: 0,
|
|
33
|
-
},
|
|
34
|
-
startedAt: null,
|
|
35
|
-
};
|
|
36
|
-
const meta = {
|
|
37
|
-
title: 'Features/Webhooks/WebhookStatusCards',
|
|
38
|
-
component: WebhookStatusCards,
|
|
39
|
-
parameters: { layout: 'padded' },
|
|
40
|
-
tags: ['autodocs'],
|
|
41
|
-
};
|
|
42
|
-
export default meta;
|
|
43
|
-
export const Active = {
|
|
44
|
-
args: { status: activeStatus },
|
|
45
|
-
};
|
|
46
|
-
export const Inactive = {
|
|
47
|
-
args: { status: inactiveStatus },
|
|
48
|
-
};
|
|
49
|
-
export const TunnelDisconnected = {
|
|
50
|
-
args: {
|
|
51
|
-
status: {
|
|
52
|
-
...activeStatus,
|
|
53
|
-
tunnel: { connected: false, publicUrl: null },
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { WebhookSystemStatus } from './types.js';
|
|
2
|
-
export interface WebhooksPageClientProps {
|
|
3
|
-
initialStatus: WebhookSystemStatus;
|
|
4
|
-
}
|
|
5
|
-
export declare function WebhooksPageClient({ initialStatus }: WebhooksPageClientProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
-
//# sourceMappingURL=webhooks-page-client.d.ts.map
|
package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhooks-page-client.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,SAAS,CAAC;AAE1E,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,mBAAmB,CAAC;CACpC;AAED,wBAAgB,kBAAkB,CAAC,EAAE,aAAa,EAAE,EAAE,uBAAuB,2CAyD5E"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useEffect, useCallback } from 'react';
|
|
4
|
-
import { RefreshCw } from 'lucide-react';
|
|
5
|
-
import { Button } from '../../ui/button.js';
|
|
6
|
-
import { PageHeader } from '../../common/page-header/index.js';
|
|
7
|
-
import { WebhookStatusCards } from './webhook-status-cards.js';
|
|
8
|
-
import { WebhookRepoList } from './webhook-repo-list.js';
|
|
9
|
-
import { WebhookDeliveryTable } from './webhook-delivery-table.js';
|
|
10
|
-
export function WebhooksPageClient({ initialStatus }) {
|
|
11
|
-
const [status, setStatus] = useState(initialStatus);
|
|
12
|
-
const [deliveries, setDeliveries] = useState([]);
|
|
13
|
-
const [refreshing, setRefreshing] = useState(false);
|
|
14
|
-
const refresh = useCallback(async () => {
|
|
15
|
-
setRefreshing(true);
|
|
16
|
-
try {
|
|
17
|
-
const [statusRes, deliveriesRes] = await Promise.all([
|
|
18
|
-
fetch('/api/webhooks/status'),
|
|
19
|
-
fetch('/api/webhooks/deliveries?limit=100'),
|
|
20
|
-
]);
|
|
21
|
-
if (statusRes.ok) {
|
|
22
|
-
setStatus(await statusRes.json());
|
|
23
|
-
}
|
|
24
|
-
if (deliveriesRes.ok) {
|
|
25
|
-
const data = await deliveriesRes.json();
|
|
26
|
-
setDeliveries(data.deliveries);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
finally {
|
|
30
|
-
setRefreshing(false);
|
|
31
|
-
}
|
|
32
|
-
}, []);
|
|
33
|
-
useEffect(() => {
|
|
34
|
-
void refresh();
|
|
35
|
-
const interval = setInterval(() => void refresh(), 5000);
|
|
36
|
-
return () => clearInterval(interval);
|
|
37
|
-
}, [refresh]);
|
|
38
|
-
return (_jsxs("div", { className: "space-y-6", children: [_jsx(PageHeader, { title: "Webhooks", description: "Monitor GitHub webhook deliveries and tunnel status", children: _jsxs(Button, { variant: "outline", size: "sm", onClick: () => void refresh(), disabled: refreshing, children: [_jsx(RefreshCw, { className: refreshing ? 'mr-2 h-4 w-4 animate-spin' : 'mr-2 h-4 w-4' }), "Refresh"] }) }), _jsx(WebhookStatusCards, { status: status }), _jsxs("div", { className: "grid gap-6 lg:grid-cols-3", children: [_jsx("div", { className: "lg:col-span-1", children: _jsx(WebhookRepoList, { webhooks: status.webhooks.registered, tunnelUrl: status.tunnel.publicUrl }) }), _jsx("div", { className: "lg:col-span-2", children: _jsx(WebhookDeliveryTable, { deliveries: deliveries }) })] })] }));
|
|
39
|
-
}
|
package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { WebhooksPageClient } from './webhooks-page-client.js';
|
|
3
|
-
declare const meta: Meta<typeof WebhooksPageClient>;
|
|
4
|
-
export default meta;
|
|
5
|
-
type Story = StoryObj<typeof meta>;
|
|
6
|
-
export declare const Active: Story;
|
|
7
|
-
export declare const Inactive: Story;
|
|
8
|
-
//# sourceMappingURL=webhooks-page-client.stories.d.ts.map
|
package/dist/src/presentation/web/components/features/webhooks/webhooks-page-client.stories.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks-page-client.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/webhooks/webhooks-page-client.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAuC5D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,kBAAkB,CAgBzC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,MAAM,EAAE,KAEpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC"}
|