@shepai/cli 1.122.2-pr367.fdba557 → 1.122.2-pr381.7d9e407
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/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/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +0 -14
- package/dist/packages/core/src/infrastructure/services/agents/common/agent-executor-factory.service.js +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/common/executors/cursor-executor.service.d.ts +28 -8
- 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 +187 -29
- 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 +9 -0
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts +5 -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 +82 -54
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +2 -2
- 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 -3
- 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 +1 -1
- package/web/.next/required-server-files.json +1 -1
- 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 +22 -22
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
- 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 +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
- 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 +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
- 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 +20 -20
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
- 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 +22 -22
- package/web/.next/server/app/(dashboard)/create/page.js +1 -1
- 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 +28 -28
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
- 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 +28 -28
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
- 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 +20 -20
- package/web/.next/server/app/(dashboard)/page.js +1 -1
- 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 +20 -20
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
- 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 +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 +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 +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js +1 -1
- package/web/.next/server/app/api/graph-data/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 +6 -6
- package/web/.next/server/app/settings/page.js +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +2 -2
- 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]__3baec744._.js → [root-of-the-server]__42b7ab55._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__3baec744._.js.map → [root-of-the-server]__42b7ab55._.js.map} +1 -1
- package/web/.next/server/chunks/{[root-of-the-server]__7d63f9a4._.js → [root-of-the-server]__53013576._.js} +2 -2
- package/web/.next/server/chunks/{[root-of-the-server]__a1c7c02a._.js → [root-of-the-server]__92078db6._.js} +2 -2
- 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_f30d0343.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__12c2ab7d._.js → [root-of-the-server]__06fef644._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__12c2ab7d._.js.map → [root-of-the-server]__06fef644._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2698e9f4._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2698e9f4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +4 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__11033878._.js.map → [root-of-the-server]__6b17a22d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +4 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__fdc75809._.js.map → [root-of-the-server]__804c006d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +4 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__76915230._.js.map → [root-of-the-server]__8c553503._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8e3bf5d7._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8e3bf5d7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9f155c0e._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9f155c0e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a022445f._.js +4 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__7a939e4e._.js.map → [root-of-the-server]__a022445f._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js +4 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__c4dc1b5a._.js.map → [root-of-the-server]__a7de2711._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c07f9f79._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c07f9f79._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c605a375._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c605a375._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0dc2cfd3._.js +3 -0
- package/web/.next/server/chunks/ssr/_0dc2cfd3._.js.map +1 -0
- 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/_1bb79fe8._.js +3 -0
- package/web/.next/server/chunks/ssr/_1bb79fe8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_204ecb5a._.js +3 -0
- package/web/.next/server/chunks/ssr/_204ecb5a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
- package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_3d1ed2a7._.js → _434878d3._.js} +2 -2
- package/web/.next/server/chunks/ssr/_434878d3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_510be09a._.js +3 -0
- package/web/.next/server/chunks/ssr/{_3eca2297._.js.map → _510be09a._.js.map} +1 -1
- 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/_75f4ccb3._.js +3 -0
- package/web/.next/server/chunks/ssr/_75f4ccb3._.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/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f1a649e3._.js +9 -0
- package/web/.next/server/chunks/ssr/_f1a649e3._.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/node_modules__pnpm_b59e4b16._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_b59e4b16._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.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_c4337169._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.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_bf50c527._.js.map +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_de814675._.js.map +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/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 +35 -57
- package/web/.next/static/chunks/0d2af96e64960ef5.css +1 -0
- package/web/.next/static/chunks/19401b65e1298cb0.js +1 -0
- package/web/.next/static/chunks/{3f0773d9b56e04a2.js → 2c0191c062d5f7ae.js} +2 -2
- package/web/.next/static/chunks/303a1217006489b9.js +1 -0
- package/web/.next/static/chunks/4562ee849ea13c3a.js +1 -0
- package/web/.next/static/chunks/4da275e6ef808c4d.js +11 -0
- package/web/.next/static/chunks/{c3c68de2392a9071.js → 50bf223ed146d4ed.js} +1 -1
- package/web/.next/static/chunks/5a9e671eb04de758.js +1 -0
- package/web/.next/static/chunks/{98e3a7cf58fc912a.js → 672e3da3ad26005b.js} +1 -1
- package/web/.next/static/chunks/6a8fb1992b738cc9.js +1 -0
- package/web/.next/static/chunks/845d8e58a91014e6.js +1 -0
- package/web/.next/static/chunks/84a181ff3270fd9f.js +1 -0
- package/web/.next/static/chunks/{e087f3e5c46c0756.js → 89ffd07cdb158389.js} +1 -1
- package/web/.next/static/chunks/96eeeb28e06de78c.js +1 -0
- package/web/.next/static/chunks/{293ccfbe777d995a.js → a637e16d364af323.js} +1 -1
- package/web/.next/static/chunks/bc1ce100834f414a.js +1 -0
- package/web/.next/static/chunks/cca0f5112a9260d8.js +1 -0
- package/web/.next/static/chunks/{1b9d34af4064dafe.js → df88f3e08b196bbf.js} +2 -2
- package/web/.next/static/chunks/e2ef95d904c360f3.js +1 -0
- package/web/.next/static/chunks/ed3a602003bcb31b.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 -55
- 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 -203
- 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 -206
- 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/7f428_lucide-react_dist_esm_icons_rocket_1575cd4d.js +0 -3
- package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_rocket_1575cd4d.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3c16bf85._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3c16bf85._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__610f06df._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__610f06df._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__76915230._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7a939e4e._.js +0 -4
- 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]__c4dc1b5a._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +0 -4
- package/web/.next/server/chunks/ssr/_07f57bd0._.js +0 -3
- package/web/.next/server/chunks/ssr/_07f57bd0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_15a756dd._.js +0 -3
- package/web/.next/server/chunks/ssr/_15a756dd._.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/_3d1ed2a7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_3eca2297._.js +0 -3
- package/web/.next/server/chunks/ssr/_4470c218._.js +0 -3
- package/web/.next/server/chunks/ssr/_4470c218._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_462cc3a6._.js +0 -3
- package/web/.next/server/chunks/ssr/_462cc3a6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_961cb4b2._.js +0 -3
- package/web/.next/server/chunks/ssr/_961cb4b2._.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/_b5babdfc._.js +0 -9
- package/web/.next/server/chunks/ssr/_b5babdfc._.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/_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/0c76de69325ef923.js +0 -1
- package/web/.next/static/chunks/3835a408dbf8d0bb.js +0 -1
- package/web/.next/static/chunks/40b6bcf1a2de4a0f.js +0 -1
- package/web/.next/static/chunks/4c5b31a2c65d4aa5.js +0 -11
- package/web/.next/static/chunks/59a0709f1b080353.js +0 -1
- package/web/.next/static/chunks/5f6161ceb4263319.js +0 -1
- package/web/.next/static/chunks/77ff1b7b725b7780.js +0 -1
- package/web/.next/static/chunks/9af45e885bd4ccef.js +0 -1
- package/web/.next/static/chunks/a57dc2afcf67304a.js +0 -1
- package/web/.next/static/chunks/b4f502a76ba10e4b.js +0 -1
- package/web/.next/static/chunks/b5d8e8100e310d9f.css +0 -1
- package/web/.next/static/chunks/b747e59ebdcbd917.js +0 -1
- package/web/.next/static/chunks/c04ce6760f349f3e.js +0 -1
- package/web/.next/static/chunks/c7e793951b20a67f.js +0 -1
- package/web/.next/static/chunks/cf30e300568abf0f.js +0 -1
- package/web/.next/static/chunks/d43dff89384fb60a.js +0 -1
- /package/web/.next/server/chunks/{[root-of-the-server]__7d63f9a4._.js.map → [root-of-the-server]__53013576._.js.map} +0 -0
- /package/web/.next/server/chunks/{[root-of-the-server]__a1c7c02a._.js.map → [root-of-the-server]__92078db6._.js.map} +0 -0
- /package/web/.next/static/{svtG6xX1MdaGWkml8eX53 → NKkt3_PEmNxKD_ihRAzNE}/_buildManifest.js +0 -0
- /package/web/.next/static/{svtG6xX1MdaGWkml8eX53 → NKkt3_PEmNxKD_ihRAzNE}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{svtG6xX1MdaGWkml8eX53 → NKkt3_PEmNxKD_ihRAzNE}/_ssgManifest.js +0 -0
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Webhook Manager Service
|
|
3
|
-
*
|
|
4
|
-
* Orchestrates the Cloudflare Tunnel and GitHub Webhook lifecycle.
|
|
5
|
-
* Follows the singleton pattern used by NotificationWatcherService
|
|
6
|
-
* and PrSyncWatcherService.
|
|
7
|
-
*
|
|
8
|
-
* Lifecycle:
|
|
9
|
-
* 1. Start Cloudflare Tunnel to get a public URL
|
|
10
|
-
* 2. Register GitHub webhooks pointing to the tunnel URL
|
|
11
|
-
* 3. Monitor for tunnel URL changes → update webhooks
|
|
12
|
-
* 4. On shutdown → remove webhooks → stop tunnel
|
|
13
|
-
*
|
|
14
|
-
* The manager is optional — if cloudflared is not installed or webhook
|
|
15
|
-
* registration fails, the system falls back to polling gracefully.
|
|
16
|
-
*/
|
|
17
|
-
import type { ITunnelService } from '../../../application/ports/output/services/tunnel-service.interface.js';
|
|
18
|
-
import type { IWebhookService } from '../../../application/ports/output/services/webhook-service.interface.js';
|
|
19
|
-
import type { RegisteredWebhook, WebhookDeliveryRecord } from './github-webhook.service.js';
|
|
20
|
-
export interface WebhookSystemStatus {
|
|
21
|
-
running: boolean;
|
|
22
|
-
tunnel: {
|
|
23
|
-
connected: boolean;
|
|
24
|
-
publicUrl: string | null;
|
|
25
|
-
};
|
|
26
|
-
webhooks: {
|
|
27
|
-
registered: readonly RegisteredWebhook[];
|
|
28
|
-
totalDeliveries: number;
|
|
29
|
-
successCount: number;
|
|
30
|
-
errorCount: number;
|
|
31
|
-
ignoredCount: number;
|
|
32
|
-
};
|
|
33
|
-
startedAt: string | null;
|
|
34
|
-
}
|
|
35
|
-
export declare class WebhookManagerService {
|
|
36
|
-
private readonly tunnelService;
|
|
37
|
-
private readonly webhookService;
|
|
38
|
-
private running;
|
|
39
|
-
private startedAt;
|
|
40
|
-
constructor(tunnelService: ITunnelService, webhookService: IWebhookService);
|
|
41
|
-
/**
|
|
42
|
-
* Start the tunnel and register webhooks.
|
|
43
|
-
* Fails gracefully — logs warnings but does not throw.
|
|
44
|
-
*
|
|
45
|
-
* @param localPort - The local web server port to tunnel
|
|
46
|
-
*/
|
|
47
|
-
start(localPort: number): Promise<void>;
|
|
48
|
-
/**
|
|
49
|
-
* Stop the webhook system — remove webhooks, then stop the tunnel.
|
|
50
|
-
*/
|
|
51
|
-
stop(): Promise<void>;
|
|
52
|
-
isRunning(): boolean;
|
|
53
|
-
getTunnelUrl(): string | null;
|
|
54
|
-
getStatus(): WebhookSystemStatus;
|
|
55
|
-
getDeliveryHistory(): readonly WebhookDeliveryRecord[];
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Initialize the webhook manager singleton.
|
|
59
|
-
* Must be called once during web server startup.
|
|
60
|
-
*
|
|
61
|
-
* @throws Error if the manager is already initialized
|
|
62
|
-
*/
|
|
63
|
-
export declare function initializeWebhookManager(tunnelService: ITunnelService, webhookService: IWebhookService): void;
|
|
64
|
-
/**
|
|
65
|
-
* Get the webhook manager singleton.
|
|
66
|
-
*
|
|
67
|
-
* @returns The webhook manager service
|
|
68
|
-
* @throws Error if the manager hasn't been initialized yet
|
|
69
|
-
*/
|
|
70
|
-
export declare function getWebhookManager(): WebhookManagerService;
|
|
71
|
-
/**
|
|
72
|
-
* Check if the webhook manager has been initialized.
|
|
73
|
-
*/
|
|
74
|
-
export declare function hasWebhookManager(): boolean;
|
|
75
|
-
/**
|
|
76
|
-
* Reset the webhook manager singleton (for testing purposes only).
|
|
77
|
-
* Stops the manager if running before resetting.
|
|
78
|
-
*
|
|
79
|
-
* @internal
|
|
80
|
-
*/
|
|
81
|
-
export declare function resetWebhookManager(): void;
|
|
82
|
-
//# sourceMappingURL=webhook-manager.service.d.ts.map
|
package/dist/packages/core/src/infrastructure/services/webhook/webhook-manager.service.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-manager.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wEAAwE,CAAC;AAC7G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yEAAyE,CAAC;AAC/G,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EAEtB,MAAM,6BAA6B,CAAC;AAErC,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,iBAAiB,EAAE,CAAC;QACzC,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;AAID,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkB;IACjD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAuB;gBAE5B,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe;IAK1E;;;;;OAKG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C7C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,SAAS,IAAI,OAAO;IAIpB,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,SAAS,IAAI,mBAAmB;IAoChC,kBAAkB,IAAI,SAAS,qBAAqB,EAAE;CAOvD;AAoBD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,cAAc,EAC7B,cAAc,EAAE,eAAe,GAC9B,IAAI,CAMN;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,qBAAqB,CASzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C"}
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Webhook Manager Service
|
|
3
|
-
*
|
|
4
|
-
* Orchestrates the Cloudflare Tunnel and GitHub Webhook lifecycle.
|
|
5
|
-
* Follows the singleton pattern used by NotificationWatcherService
|
|
6
|
-
* and PrSyncWatcherService.
|
|
7
|
-
*
|
|
8
|
-
* Lifecycle:
|
|
9
|
-
* 1. Start Cloudflare Tunnel to get a public URL
|
|
10
|
-
* 2. Register GitHub webhooks pointing to the tunnel URL
|
|
11
|
-
* 3. Monitor for tunnel URL changes → update webhooks
|
|
12
|
-
* 4. On shutdown → remove webhooks → stop tunnel
|
|
13
|
-
*
|
|
14
|
-
* The manager is optional — if cloudflared is not installed or webhook
|
|
15
|
-
* registration fails, the system falls back to polling gracefully.
|
|
16
|
-
*/
|
|
17
|
-
const TAG = '[WebhookManager]';
|
|
18
|
-
export class WebhookManagerService {
|
|
19
|
-
tunnelService;
|
|
20
|
-
webhookService;
|
|
21
|
-
running = false;
|
|
22
|
-
startedAt = null;
|
|
23
|
-
constructor(tunnelService, webhookService) {
|
|
24
|
-
this.tunnelService = tunnelService;
|
|
25
|
-
this.webhookService = webhookService;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Start the tunnel and register webhooks.
|
|
29
|
-
* Fails gracefully — logs warnings but does not throw.
|
|
30
|
-
*
|
|
31
|
-
* @param localPort - The local web server port to tunnel
|
|
32
|
-
*/
|
|
33
|
-
async start(localPort) {
|
|
34
|
-
if (this.running)
|
|
35
|
-
return;
|
|
36
|
-
try {
|
|
37
|
-
// Step 1: Start the tunnel
|
|
38
|
-
// eslint-disable-next-line no-console
|
|
39
|
-
console.log(`${TAG} Starting Cloudflare Tunnel for port ${localPort}...`);
|
|
40
|
-
const publicUrl = await this.tunnelService.start(localPort);
|
|
41
|
-
// Step 2: Listen for URL changes
|
|
42
|
-
this.tunnelService.onUrlChange(async (newUrl) => {
|
|
43
|
-
// eslint-disable-next-line no-console
|
|
44
|
-
console.log(`${TAG} Tunnel URL changed, updating webhooks...`);
|
|
45
|
-
try {
|
|
46
|
-
await this.webhookService.updateWebhookUrl(newUrl);
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
50
|
-
// eslint-disable-next-line no-console
|
|
51
|
-
console.warn(`${TAG} Failed to update webhooks after URL change: ${msg}`);
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
// Step 3: Register webhooks with external services
|
|
55
|
-
await this.webhookService.registerWebhooks(publicUrl);
|
|
56
|
-
this.running = true;
|
|
57
|
-
this.startedAt = new Date().toISOString();
|
|
58
|
-
// eslint-disable-next-line no-console
|
|
59
|
-
console.log(`${TAG} Webhook system ready (tunnel: ${publicUrl})`);
|
|
60
|
-
}
|
|
61
|
-
catch (error) {
|
|
62
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
63
|
-
// eslint-disable-next-line no-console
|
|
64
|
-
console.warn(`${TAG} Failed to start webhook system (falling back to polling): ${msg}`);
|
|
65
|
-
// Clean up partial state
|
|
66
|
-
try {
|
|
67
|
-
await this.tunnelService.stop();
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
// Already stopped or never started
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Stop the webhook system — remove webhooks, then stop the tunnel.
|
|
76
|
-
*/
|
|
77
|
-
async stop() {
|
|
78
|
-
if (!this.running)
|
|
79
|
-
return;
|
|
80
|
-
// eslint-disable-next-line no-console
|
|
81
|
-
console.log(`${TAG} Shutting down webhook system...`);
|
|
82
|
-
try {
|
|
83
|
-
await this.webhookService.removeWebhooks();
|
|
84
|
-
}
|
|
85
|
-
catch (error) {
|
|
86
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
87
|
-
// eslint-disable-next-line no-console
|
|
88
|
-
console.warn(`${TAG} Failed to remove webhooks during shutdown: ${msg}`);
|
|
89
|
-
}
|
|
90
|
-
try {
|
|
91
|
-
await this.tunnelService.stop();
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
95
|
-
// eslint-disable-next-line no-console
|
|
96
|
-
console.warn(`${TAG} Failed to stop tunnel during shutdown: ${msg}`);
|
|
97
|
-
}
|
|
98
|
-
this.running = false;
|
|
99
|
-
// eslint-disable-next-line no-console
|
|
100
|
-
console.log(`${TAG} Webhook system stopped`);
|
|
101
|
-
}
|
|
102
|
-
isRunning() {
|
|
103
|
-
return this.running;
|
|
104
|
-
}
|
|
105
|
-
getTunnelUrl() {
|
|
106
|
-
return this.tunnelService.getPublicUrl();
|
|
107
|
-
}
|
|
108
|
-
getStatus() {
|
|
109
|
-
const ghService = this.webhookService;
|
|
110
|
-
const deliveries = typeof ghService.getDeliveryHistory === 'function' ? ghService.getDeliveryHistory() : [];
|
|
111
|
-
const registered = typeof ghService.getRegisteredWebhooks === 'function'
|
|
112
|
-
? ghService.getRegisteredWebhooks()
|
|
113
|
-
: [];
|
|
114
|
-
let successCount = 0;
|
|
115
|
-
let errorCount = 0;
|
|
116
|
-
let ignoredCount = 0;
|
|
117
|
-
for (const d of deliveries) {
|
|
118
|
-
if (d.status === 'success')
|
|
119
|
-
successCount++;
|
|
120
|
-
else if (d.status === 'error')
|
|
121
|
-
errorCount++;
|
|
122
|
-
else
|
|
123
|
-
ignoredCount++;
|
|
124
|
-
}
|
|
125
|
-
return {
|
|
126
|
-
running: this.running,
|
|
127
|
-
tunnel: {
|
|
128
|
-
connected: this.tunnelService.isRunning(),
|
|
129
|
-
publicUrl: this.tunnelService.getPublicUrl(),
|
|
130
|
-
},
|
|
131
|
-
webhooks: {
|
|
132
|
-
registered,
|
|
133
|
-
totalDeliveries: deliveries.length,
|
|
134
|
-
successCount,
|
|
135
|
-
errorCount,
|
|
136
|
-
ignoredCount,
|
|
137
|
-
},
|
|
138
|
-
startedAt: this.startedAt,
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
getDeliveryHistory() {
|
|
142
|
-
const ghService = this.webhookService;
|
|
143
|
-
if (typeof ghService.getDeliveryHistory === 'function') {
|
|
144
|
-
return ghService.getDeliveryHistory();
|
|
145
|
-
}
|
|
146
|
-
return [];
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
// --- Singleton accessors ---
|
|
150
|
-
//
|
|
151
|
-
// The singleton is stored on globalThis so that it survives module duplication
|
|
152
|
-
// across bundler contexts (e.g. Next.js Turbopack bundles API routes separately
|
|
153
|
-
// from the dev-server entry point, giving each its own copy of module-level
|
|
154
|
-
// variables). By using globalThis, the same manager instance is visible to both
|
|
155
|
-
// the initializer (dev-server.ts / CLI) and the API route handlers.
|
|
156
|
-
const GLOBAL_KEY = '__shepWebhookManager';
|
|
157
|
-
function getInstance() {
|
|
158
|
-
return globalThis[GLOBAL_KEY] ?? null;
|
|
159
|
-
}
|
|
160
|
-
function setInstance(instance) {
|
|
161
|
-
globalThis[GLOBAL_KEY] = instance;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Initialize the webhook manager singleton.
|
|
165
|
-
* Must be called once during web server startup.
|
|
166
|
-
*
|
|
167
|
-
* @throws Error if the manager is already initialized
|
|
168
|
-
*/
|
|
169
|
-
export function initializeWebhookManager(tunnelService, webhookService) {
|
|
170
|
-
if (getInstance() !== null) {
|
|
171
|
-
throw new Error('Webhook manager already initialized. Cannot re-initialize.');
|
|
172
|
-
}
|
|
173
|
-
setInstance(new WebhookManagerService(tunnelService, webhookService));
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Get the webhook manager singleton.
|
|
177
|
-
*
|
|
178
|
-
* @returns The webhook manager service
|
|
179
|
-
* @throws Error if the manager hasn't been initialized yet
|
|
180
|
-
*/
|
|
181
|
-
export function getWebhookManager() {
|
|
182
|
-
const instance = getInstance();
|
|
183
|
-
if (instance === null) {
|
|
184
|
-
throw new Error('Webhook manager not initialized. Call initializeWebhookManager() during web server startup.');
|
|
185
|
-
}
|
|
186
|
-
return instance;
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Check if the webhook manager has been initialized.
|
|
190
|
-
*/
|
|
191
|
-
export function hasWebhookManager() {
|
|
192
|
-
return getInstance() !== null;
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Reset the webhook manager singleton (for testing purposes only).
|
|
196
|
-
* Stops the manager if running before resetting.
|
|
197
|
-
*
|
|
198
|
-
* @internal
|
|
199
|
-
*/
|
|
200
|
-
export function resetWebhookManager() {
|
|
201
|
-
const instance = getInstance();
|
|
202
|
-
if (instance !== null) {
|
|
203
|
-
void instance.stop();
|
|
204
|
-
}
|
|
205
|
-
setInstance(null);
|
|
206
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-webhook-status.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/load-webhook-status.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sEAAsE,CAAC;AAEhH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAiBtE"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
import { hasWebhookManager, getWebhookManager, } from '../../../../../packages/core/src/infrastructure/services/webhook/webhook-manager.service.js';
|
|
3
|
-
export async function loadWebhookStatus() {
|
|
4
|
-
if (!hasWebhookManager()) {
|
|
5
|
-
return {
|
|
6
|
-
running: false,
|
|
7
|
-
tunnel: { connected: false, publicUrl: null },
|
|
8
|
-
webhooks: {
|
|
9
|
-
registered: [],
|
|
10
|
-
totalDeliveries: 0,
|
|
11
|
-
successCount: 0,
|
|
12
|
-
errorCount: 0,
|
|
13
|
-
ignoredCount: 0,
|
|
14
|
-
},
|
|
15
|
-
startedAt: null,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
return getWebhookManager().getStatus();
|
|
19
|
-
}
|
|
@@ -1,9 +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
|
-
export declare const dynamic = "force-dynamic";
|
|
8
|
-
export declare function GET(request: Request): 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/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"}
|