reviewflow 3.32.0 → 3.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/main/routes.d.ts.map +1 -1
- package/dist/main/routes.js +52 -2
- package/dist/main/routes.js.map +1 -1
- package/dist/main/server.d.ts.map +1 -1
- package/dist/main/server.js +5 -1
- package/dist/main/server.js.map +1 -1
- package/dist/modules/platform-integration/entities/egressScan/egressScan.defaults.d.ts +3 -0
- package/dist/modules/platform-integration/entities/egressScan/egressScan.defaults.d.ts.map +1 -0
- package/dist/modules/platform-integration/entities/egressScan/egressScan.defaults.js +9 -0
- package/dist/modules/platform-integration/entities/egressScan/egressScan.defaults.js.map +1 -0
- package/dist/modules/platform-integration/entities/egressScan/egressScan.gateway.d.ts +28 -0
- package/dist/modules/platform-integration/entities/egressScan/egressScan.gateway.d.ts.map +1 -0
- package/dist/modules/platform-integration/entities/egressScan/egressScan.gateway.js +2 -0
- package/dist/modules/platform-integration/entities/egressScan/egressScan.gateway.js.map +1 -0
- package/dist/modules/platform-integration/entities/egressScan/egressScan.scanner.d.ts +11 -0
- package/dist/modules/platform-integration/entities/egressScan/egressScan.scanner.d.ts.map +1 -0
- package/dist/modules/platform-integration/entities/egressScan/egressScan.scanner.js +70 -0
- package/dist/modules/platform-integration/entities/egressScan/egressScan.scanner.js.map +1 -0
- package/dist/modules/platform-integration/entities/egressScan/egressTrace.gateway.d.ts +5 -0
- package/dist/modules/platform-integration/entities/egressScan/egressTrace.gateway.d.ts.map +1 -0
- package/dist/modules/platform-integration/entities/egressScan/egressTrace.gateway.js +2 -0
- package/dist/modules/platform-integration/entities/egressScan/egressTrace.gateway.js.map +1 -0
- package/dist/modules/platform-integration/entities/executorToken/executorCapability.d.ts +9 -0
- package/dist/modules/platform-integration/entities/executorToken/executorCapability.d.ts.map +1 -0
- package/dist/modules/platform-integration/entities/executorToken/executorCapability.js +10 -0
- package/dist/modules/platform-integration/entities/executorToken/executorCapability.js.map +1 -0
- package/dist/modules/platform-integration/entities/idempotency/idempotencyStore.gateway.d.ts +4 -0
- package/dist/modules/platform-integration/entities/idempotency/idempotencyStore.gateway.d.ts.map +1 -0
- package/dist/modules/platform-integration/entities/idempotency/idempotencyStore.gateway.js +2 -0
- package/dist/modules/platform-integration/entities/idempotency/idempotencyStore.gateway.js.map +1 -0
- package/dist/modules/platform-integration/entities/memberAccess/memberAccess.d.ts +27 -0
- package/dist/modules/platform-integration/entities/memberAccess/memberAccess.d.ts.map +1 -0
- package/dist/modules/platform-integration/entities/memberAccess/memberAccess.gateway.d.ts +13 -0
- package/dist/modules/platform-integration/entities/memberAccess/memberAccess.gateway.d.ts.map +1 -0
- package/dist/modules/platform-integration/entities/memberAccess/memberAccess.gateway.js +2 -0
- package/dist/modules/platform-integration/entities/memberAccess/memberAccess.gateway.js.map +1 -0
- package/dist/modules/platform-integration/entities/memberAccess/memberAccess.js +21 -0
- package/dist/modules/platform-integration/entities/memberAccess/memberAccess.js.map +1 -0
- package/dist/modules/platform-integration/entities/transport/cidr.d.ts +2 -0
- package/dist/modules/platform-integration/entities/transport/cidr.d.ts.map +1 -0
- package/dist/modules/platform-integration/entities/transport/cidr.js +36 -0
- package/dist/modules/platform-integration/entities/transport/cidr.js.map +1 -0
- package/dist/modules/platform-integration/entities/transport/clientIpResolver.gateway.d.ts +8 -0
- package/dist/modules/platform-integration/entities/transport/clientIpResolver.gateway.d.ts.map +1 -0
- package/dist/modules/platform-integration/entities/transport/clientIpResolver.gateway.js +2 -0
- package/dist/modules/platform-integration/entities/transport/clientIpResolver.gateway.js.map +1 -0
- package/dist/modules/platform-integration/entities/transport/transportContext.d.ts +16 -0
- package/dist/modules/platform-integration/entities/transport/transportContext.d.ts.map +1 -0
- package/dist/modules/platform-integration/entities/transport/transportContext.js +2 -0
- package/dist/modules/platform-integration/entities/transport/transportContext.js.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js +4 -4
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.d.ts +5 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.d.ts.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js +112 -18
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/transportGuard.middleware.d.ts +25 -0
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/transportGuard.middleware.d.ts.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/transportGuard.middleware.js +26 -0
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/transportGuard.middleware.js.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/egressScanned.noteCommentPost.gateway.d.ts +14 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/egressScanned.noteCommentPost.gateway.d.ts.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/egressScanned.noteCommentPost.gateway.js +34 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/egressScanned.noteCommentPost.gateway.js.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/inMemoryIdempotencyStore.gateway.d.ts +14 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/inMemoryIdempotencyStore.gateway.d.ts.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/inMemoryIdempotencyStore.gateway.js +27 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/inMemoryIdempotencyStore.gateway.js.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/loggerEgressTrace.gateway.d.ts +9 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/loggerEgressTrace.gateway.d.ts.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/loggerEgressTrace.gateway.js +14 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/loggerEgressTrace.gateway.js.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/memberAccess.gitlab.cli.gateway.d.ts +31 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/memberAccess.gitlab.cli.gateway.d.ts.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/memberAccess.gitlab.cli.gateway.js +83 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/memberAccess.gitlab.cli.gateway.js.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/scopedGitLabExecutor.d.ts +17 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/scopedGitLabExecutor.d.ts.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/scopedGitLabExecutor.js +17 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/scopedGitLabExecutor.js.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.d.ts +6 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.d.ts.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.js +28 -1
- package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.js.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/gateways/transport/clientIpResolver.forwardedFor.gateway.d.ts +5 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/transport/clientIpResolver.forwardedFor.gateway.d.ts.map +1 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/transport/clientIpResolver.forwardedFor.gateway.js +16 -0
- package/dist/modules/platform-integration/interface-adapters/gateways/transport/clientIpResolver.forwardedFor.gateway.js.map +1 -0
- package/dist/modules/platform-integration/services/autoExecutorActionFilter.d.ts +9 -0
- package/dist/modules/platform-integration/services/autoExecutorActionFilter.d.ts.map +1 -0
- package/dist/modules/platform-integration/services/autoExecutorActionFilter.js +33 -0
- package/dist/modules/platform-integration/services/autoExecutorActionFilter.js.map +1 -0
- package/dist/modules/platform-integration/services/pinnedThreadFetchTarget.d.ts +23 -0
- package/dist/modules/platform-integration/services/pinnedThreadFetchTarget.d.ts.map +1 -0
- package/dist/modules/platform-integration/services/pinnedThreadFetchTarget.js +21 -0
- package/dist/modules/platform-integration/services/pinnedThreadFetchTarget.js.map +1 -0
- package/dist/modules/platform-integration/services/scopedExecutorEnvironment.d.ts +21 -0
- package/dist/modules/platform-integration/services/scopedExecutorEnvironment.d.ts.map +1 -0
- package/dist/modules/platform-integration/services/scopedExecutorEnvironment.js +39 -0
- package/dist/modules/platform-integration/services/scopedExecutorEnvironment.js.map +1 -0
- package/dist/modules/platform-integration/usecases/isTrustedActor.usecase.d.ts +17 -0
- package/dist/modules/platform-integration/usecases/isTrustedActor.usecase.d.ts.map +1 -0
- package/dist/modules/platform-integration/usecases/isTrustedActor.usecase.js +23 -0
- package/dist/modules/platform-integration/usecases/isTrustedActor.usecase.js.map +1 -0
- package/dist/modules/platform-integration/usecases/transport/evaluateTransport.usecase.d.ts +3 -0
- package/dist/modules/platform-integration/usecases/transport/evaluateTransport.usecase.d.ts.map +1 -0
- package/dist/modules/platform-integration/usecases/transport/evaluateTransport.usecase.js +18 -0
- package/dist/modules/platform-integration/usecases/transport/evaluateTransport.usecase.js.map +1 -0
- package/dist/modules/review-execution/entities/actionProvenance/actionProvenance.d.ts +9 -0
- package/dist/modules/review-execution/entities/actionProvenance/actionProvenance.d.ts.map +1 -0
- package/dist/modules/review-execution/entities/actionProvenance/actionProvenance.js +11 -0
- package/dist/modules/review-execution/entities/actionProvenance/actionProvenance.js.map +1 -0
- package/dist/modules/review-execution/entities/threadInventory/threadInventory.gateway.d.ts +13 -0
- package/dist/modules/review-execution/entities/threadInventory/threadInventory.gateway.d.ts.map +1 -0
- package/dist/modules/review-execution/entities/threadInventory/threadInventory.gateway.js +2 -0
- package/dist/modules/review-execution/entities/threadInventory/threadInventory.gateway.js.map +1 -0
- package/dist/modules/review-execution/interface-adapters/gateways/threadInventory.gitlab.gateway.d.ts +14 -0
- package/dist/modules/review-execution/interface-adapters/gateways/threadInventory.gitlab.gateway.d.ts.map +1 -0
- package/dist/modules/review-execution/interface-adapters/gateways/threadInventory.gitlab.gateway.js +31 -0
- package/dist/modules/review-execution/interface-adapters/gateways/threadInventory.gitlab.gateway.js.map +1 -0
- package/dist/modules/review-execution/services/constrainActionSurface.d.ts +19 -0
- package/dist/modules/review-execution/services/constrainActionSurface.d.ts.map +1 -0
- package/dist/modules/review-execution/services/constrainActionSurface.js +49 -0
- package/dist/modules/review-execution/services/constrainActionSurface.js.map +1 -0
- package/dist/modules/review-execution/services/contextActionsExecutor.d.ts +2 -1
- package/dist/modules/review-execution/services/contextActionsExecutor.d.ts.map +1 -1
- package/dist/modules/review-execution/services/contextActionsExecutor.js +20 -2
- package/dist/modules/review-execution/services/contextActionsExecutor.js.map +1 -1
- package/dist/modules/review-execution/services/dispatchConstrainedActions.d.ts +30 -0
- package/dist/modules/review-execution/services/dispatchConstrainedActions.d.ts.map +1 -0
- package/dist/modules/review-execution/services/dispatchConstrainedActions.js +20 -0
- package/dist/modules/review-execution/services/dispatchConstrainedActions.js.map +1 -0
- package/dist/modules/review-execution/services/publicOutputExecutor.d.ts +10 -0
- package/dist/modules/review-execution/services/publicOutputExecutor.d.ts.map +1 -0
- package/dist/modules/review-execution/services/publicOutputExecutor.js +27 -0
- package/dist/modules/review-execution/services/publicOutputExecutor.js.map +1 -0
- package/dist/modules/review-execution/services/resolveThreadInventory.d.ts +19 -0
- package/dist/modules/review-execution/services/resolveThreadInventory.d.ts.map +1 -0
- package/dist/modules/review-execution/services/resolveThreadInventory.js +39 -0
- package/dist/modules/review-execution/services/resolveThreadInventory.js.map +1 -0
- package/dist/modules/review-execution/services/threadActionsExecutor.d.ts +11 -1
- package/dist/modules/review-execution/services/threadActionsExecutor.d.ts.map +1 -1
- package/dist/modules/review-execution/services/threadActionsExecutor.js +24 -2
- package/dist/modules/review-execution/services/threadActionsExecutor.js.map +1 -1
- package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.d.ts +6 -0
- package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.d.ts.map +1 -1
- package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.js +2 -1
- package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.js.map +1 -1
- package/dist/security/gitlabWebhookTokenSource.d.ts +9 -0
- package/dist/security/gitlabWebhookTokenSource.d.ts.map +1 -0
- package/dist/security/gitlabWebhookTokenSource.js +15 -0
- package/dist/security/gitlabWebhookTokenSource.js.map +1 -0
- package/dist/security/transportGuardConfig.d.ts +16 -0
- package/dist/security/transportGuardConfig.d.ts.map +1 -0
- package/dist/security/transportGuardConfig.js +38 -0
- package/dist/security/transportGuardConfig.js.map +1 -0
- package/dist/security/verifier.d.ts +9 -2
- package/dist/security/verifier.d.ts.map +1 -1
- package/dist/security/verifier.js +27 -10
- package/dist/security/verifier.js.map +1 -1
- package/dist/tests/factories/transportContext.factory.d.ts +5 -0
- package/dist/tests/factories/transportContext.factory.d.ts.map +1 -0
- package/dist/tests/factories/transportContext.factory.js +14 -0
- package/dist/tests/factories/transportContext.factory.js.map +1 -0
- package/dist/tests/stubs/egressScan.stub.d.ts +16 -0
- package/dist/tests/stubs/egressScan.stub.d.ts.map +1 -0
- package/dist/tests/stubs/egressScan.stub.js +28 -0
- package/dist/tests/stubs/egressScan.stub.js.map +1 -0
- package/dist/tests/stubs/idempotencyStore.stub.d.ts +9 -0
- package/dist/tests/stubs/idempotencyStore.stub.d.ts.map +1 -0
- package/dist/tests/stubs/idempotencyStore.stub.js +19 -0
- package/dist/tests/stubs/idempotencyStore.stub.js.map +1 -0
- package/dist/tests/stubs/memberAccess.stub.d.ts +24 -0
- package/dist/tests/stubs/memberAccess.stub.d.ts.map +1 -0
- package/dist/tests/stubs/memberAccess.stub.js +28 -0
- package/dist/tests/stubs/memberAccess.stub.js.map +1 -0
- package/dist/tests/units/entities/egressScan/egressScan.scanner.test.d.ts +2 -0
- package/dist/tests/units/entities/egressScan/egressScan.scanner.test.d.ts.map +1 -0
- package/dist/tests/units/entities/egressScan/egressScan.scanner.test.js +136 -0
- package/dist/tests/units/entities/egressScan/egressScan.scanner.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +114 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/gateways/egressScanned.noteCommentPost.gateway.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/gateways/egressScanned.noteCommentPost.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/gateways/egressScanned.noteCommentPost.gateway.test.js +116 -0
- package/dist/tests/units/interface-adapters/gateways/egressScanned.noteCommentPost.gateway.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/controllers/gitlabProcessorProvenance.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/controllers/gitlabProcessorProvenance.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/controllers/gitlabProcessorProvenance.test.js +69 -0
- package/dist/tests/units/modules/platform-integration/controllers/gitlabProcessorProvenance.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/entities/executorCapability.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/entities/executorCapability.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/entities/executorCapability.test.js +28 -0
- package/dist/tests/units/modules/platform-integration/entities/executorCapability.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/entities/memberAccess/memberAccess.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/entities/memberAccess/memberAccess.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/entities/memberAccess/memberAccess.test.js +18 -0
- package/dist/tests/units/modules/platform-integration/entities/memberAccess/memberAccess.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/gateways/defaultGitLabExecutor.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/gateways/defaultGitLabExecutor.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/gateways/defaultGitLabExecutor.test.js +13 -0
- package/dist/tests/units/modules/platform-integration/gateways/defaultGitLabExecutor.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/gateways/memberAccess.gitlab.cli.gateway.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/gateways/memberAccess.gitlab.cli.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/gateways/memberAccess.gitlab.cli.gateway.test.js +105 -0
- package/dist/tests/units/modules/platform-integration/gateways/memberAccess.gitlab.cli.gateway.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/gateways/scopedGitLabExecutor.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/gateways/scopedGitLabExecutor.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/gateways/scopedGitLabExecutor.test.js +85 -0
- package/dist/tests/units/modules/platform-integration/gateways/scopedGitLabExecutor.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/controllers/webhook/gitlabIdempotency.controller.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/controllers/webhook/gitlabIdempotency.controller.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/controllers/webhook/gitlabIdempotency.controller.test.js +216 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/controllers/webhook/gitlabIdempotency.controller.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/inMemoryIdempotencyStore.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/inMemoryIdempotencyStore.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/inMemoryIdempotencyStore.test.js +48 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/inMemoryIdempotencyStore.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/transport/clientIpResolver.forwardedFor.gateway.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/transport/clientIpResolver.forwardedFor.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/transport/clientIpResolver.forwardedFor.gateway.test.js +29 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/transport/clientIpResolver.forwardedFor.gateway.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/transport/transportGuard.middleware.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/transport/transportGuard.middleware.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/transport/transportGuard.middleware.test.js +66 -0
- package/dist/tests/units/modules/platform-integration/interface-adapters/transport/transportGuard.middleware.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/services/autoExecutorActionFilter.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/services/autoExecutorActionFilter.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/services/autoExecutorActionFilter.test.js +38 -0
- package/dist/tests/units/modules/platform-integration/services/autoExecutorActionFilter.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/services/autoExecutorCapabilityGate.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/services/autoExecutorCapabilityGate.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/services/autoExecutorCapabilityGate.test.js +40 -0
- package/dist/tests/units/modules/platform-integration/services/autoExecutorCapabilityGate.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/services/pinnedThreadFetchTarget.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/services/pinnedThreadFetchTarget.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/services/pinnedThreadFetchTarget.test.js +76 -0
- package/dist/tests/units/modules/platform-integration/services/pinnedThreadFetchTarget.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/services/scopedExecutorEnvironment.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/services/scopedExecutorEnvironment.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/services/scopedExecutorEnvironment.test.js +120 -0
- package/dist/tests/units/modules/platform-integration/services/scopedExecutorEnvironment.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/usecases/isTrustedActor.usecase.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/usecases/isTrustedActor.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/usecases/isTrustedActor.usecase.test.js +33 -0
- package/dist/tests/units/modules/platform-integration/usecases/isTrustedActor.usecase.test.js.map +1 -0
- package/dist/tests/units/modules/platform-integration/usecases/transport/evaluateTransport.usecase.test.d.ts +2 -0
- package/dist/tests/units/modules/platform-integration/usecases/transport/evaluateTransport.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/modules/platform-integration/usecases/transport/evaluateTransport.usecase.test.js +69 -0
- package/dist/tests/units/modules/platform-integration/usecases/transport/evaluateTransport.usecase.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/entities/actionProvenance/actionProvenance.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/entities/actionProvenance/actionProvenance.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/entities/actionProvenance/actionProvenance.test.js +26 -0
- package/dist/tests/units/modules/review-execution/entities/actionProvenance/actionProvenance.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/gateways/threadInventory.gitlab.gateway.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/gateways/threadInventory.gitlab.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/gateways/threadInventory.gitlab.gateway.test.js +44 -0
- package/dist/tests/units/modules/review-execution/interface-adapters/gateways/threadInventory.gitlab.gateway.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/services/constrainActionSurface.parity.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/services/constrainActionSurface.parity.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/services/constrainActionSurface.parity.test.js +29 -0
- package/dist/tests/units/modules/review-execution/services/constrainActionSurface.parity.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/services/constrainActionSurface.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/services/constrainActionSurface.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/services/constrainActionSurface.test.js +115 -0
- package/dist/tests/units/modules/review-execution/services/constrainActionSurface.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/services/contextActionsExecutor.autopath.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/services/contextActionsExecutor.autopath.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/services/contextActionsExecutor.autopath.test.js +52 -0
- package/dist/tests/units/modules/review-execution/services/contextActionsExecutor.autopath.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/services/dispatchConstrainedActions.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/services/dispatchConstrainedActions.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/services/dispatchConstrainedActions.test.js +124 -0
- package/dist/tests/units/modules/review-execution/services/dispatchConstrainedActions.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/services/resolveThreadInventory.test.d.ts +2 -0
- package/dist/tests/units/modules/review-execution/services/resolveThreadInventory.test.d.ts.map +1 -0
- package/dist/tests/units/modules/review-execution/services/resolveThreadInventory.test.js +67 -0
- package/dist/tests/units/modules/review-execution/services/resolveThreadInventory.test.js.map +1 -0
- package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.js +42 -0
- package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.js.map +1 -1
- package/dist/tests/units/security/gitlabTokenRotation.test.d.ts +2 -0
- package/dist/tests/units/security/gitlabTokenRotation.test.d.ts.map +1 -0
- package/dist/tests/units/security/gitlabTokenRotation.test.js +39 -0
- package/dist/tests/units/security/gitlabTokenRotation.test.js.map +1 -0
- package/dist/tests/units/security/noSpoofableTransportGuard.test.d.ts +2 -0
- package/dist/tests/units/security/noSpoofableTransportGuard.test.d.ts.map +1 -0
- package/dist/tests/units/security/noSpoofableTransportGuard.test.js +30 -0
- package/dist/tests/units/security/noSpoofableTransportGuard.test.js.map +1 -0
- package/dist/tests/units/security/transportGuardConfig.test.d.ts +2 -0
- package/dist/tests/units/security/transportGuardConfig.test.d.ts.map +1 -0
- package/dist/tests/units/security/transportGuardConfig.test.js +38 -0
- package/dist/tests/units/security/transportGuardConfig.test.js.map +1 -0
- package/dist/tests/units/security/verifier.test.js +33 -2
- package/dist/tests/units/security/verifier.test.js.map +1 -1
- package/dist/tests/units/services/contextActionsExecutor.egress.test.d.ts +2 -0
- package/dist/tests/units/services/contextActionsExecutor.egress.test.d.ts.map +1 -0
- package/dist/tests/units/services/contextActionsExecutor.egress.test.js +117 -0
- package/dist/tests/units/services/contextActionsExecutor.egress.test.js.map +1 -0
- package/dist/tests/units/services/contextActionsExecutor.test.js +24 -31
- package/dist/tests/units/services/contextActionsExecutor.test.js.map +1 -1
- package/dist/tests/units/services/publicOutputExecutor.test.d.ts +2 -0
- package/dist/tests/units/services/publicOutputExecutor.test.d.ts.map +1 -0
- package/dist/tests/units/services/publicOutputExecutor.test.js +72 -0
- package/dist/tests/units/services/publicOutputExecutor.test.js.map +1 -0
- package/dist/tests/units/services/threadActionsExecutor.egress.test.d.ts +2 -0
- package/dist/tests/units/services/threadActionsExecutor.egress.test.d.ts.map +1 -0
- package/dist/tests/units/services/threadActionsExecutor.egress.test.js +113 -0
- package/dist/tests/units/services/threadActionsExecutor.egress.test.js.map +1 -0
- package/dist/tests/units/services/threadActionsExecutor.test.js +32 -96
- package/dist/tests/units/services/threadActionsExecutor.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { constrainActionSurface } from '../../../modules/review-execution/services/constrainActionSurface.js';
|
|
2
|
+
import { resolveThreadInventory } from '../../../modules/review-execution/services/resolveThreadInventory.js';
|
|
3
|
+
import { executeThreadActions, } from '../../../modules/review-execution/services/threadActionsExecutor.js';
|
|
4
|
+
/**
|
|
5
|
+
* Single chokepoint between parsed LLM actions and live write commands.
|
|
6
|
+
*
|
|
7
|
+
* Resolves the authenticated MR thread inventory (fail-closed), bounds the action
|
|
8
|
+
* surface against provenance + that inventory, then dispatches only the surviving
|
|
9
|
+
* actions to the executor. Forged or out-of-MR thread ids never reach a live write.
|
|
10
|
+
* Public-output verbs that survive are routed through the scanned post sink.
|
|
11
|
+
*/
|
|
12
|
+
export async function dispatchConstrainedActions(actions, options) {
|
|
13
|
+
const { context, provenance, inventoryGateway, logger, executor, postGateway = null } = options;
|
|
14
|
+
const threadInventory = resolveThreadInventory(inventoryGateway, { projectPath: context.projectPath, mrNumber: context.mrNumber }, logger);
|
|
15
|
+
const constrained = constrainActionSurface(actions, { provenance, threadInventory });
|
|
16
|
+
return executeThreadActions(constrained, context, logger, executor, postGateway, {
|
|
17
|
+
skipAutoCapabilityFilter: true,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=dispatchConstrainedActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatchConstrainedActions.js","sourceRoot":"","sources":["../../../../src/modules/review-execution/services/dispatchConstrainedActions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+DAA+D,CAAA;AACtG,OAAO,EAAE,sBAAsB,EAAE,MAAM,+DAA+D,CAAA;AACtG,OAAO,EACL,oBAAoB,GAIrB,MAAM,8DAA8D,CAAA;AAmBrE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAuB,EACvB,OAAwB;IAExB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,OAAO,CAAA;IAE/F,MAAM,eAAe,GAAG,sBAAsB,CAC5C,gBAAgB,EAChB,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAChE,MAAM,CACP,CAAA;IAED,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAA;IAEpF,OAAO,oBAAoB,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE;QAC/E,wBAAwB,EAAE,IAAI;KAC/B,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ReviewAction } from '../../../modules/review-execution/entities/reviewAction/reviewAction.js';
|
|
2
|
+
import type { NoteCommentPostGateway } from '../../../modules/platform-integration/entities/noteComment/noteCommentPost.gateway.js';
|
|
3
|
+
export type PublicOutputAction = ReviewAction;
|
|
4
|
+
export interface PublicOutputContext {
|
|
5
|
+
projectPath: string;
|
|
6
|
+
mrNumber: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function isPublicOutputAction(action: ReviewAction): boolean;
|
|
9
|
+
export declare function executePublicOutput(actions: PublicOutputAction[], context: PublicOutputContext, postGateway: NoteCommentPostGateway): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=publicOutputExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publicOutputExecutor.d.ts","sourceRoot":"","sources":["../../../../src/modules/review-execution/services/publicOutputExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kEAAkE,CAAC;AACrG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gFAAgF,CAAC;AAE7H,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAaD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAElE;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,kBAAkB,EAAE,EAC7B,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,sBAAsB,GAClC,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
function publicOutputBody(action) {
|
|
2
|
+
switch (action.type) {
|
|
3
|
+
case 'POST_COMMENT':
|
|
4
|
+
return action.body;
|
|
5
|
+
case 'THREAD_REPLY':
|
|
6
|
+
return action.message;
|
|
7
|
+
default:
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function isPublicOutputAction(action) {
|
|
12
|
+
return publicOutputBody(action) !== null;
|
|
13
|
+
}
|
|
14
|
+
export async function executePublicOutput(actions, context, postGateway) {
|
|
15
|
+
for (const action of actions) {
|
|
16
|
+
const body = publicOutputBody(action);
|
|
17
|
+
if (body === null) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
await postGateway.postComment({
|
|
21
|
+
projectPath: context.projectPath,
|
|
22
|
+
mrNumber: context.mrNumber,
|
|
23
|
+
body,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=publicOutputExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publicOutputExecutor.js","sourceRoot":"","sources":["../../../../src/modules/review-execution/services/publicOutputExecutor.ts"],"names":[],"mappings":"AAUA,SAAS,gBAAgB,CAAC,MAAoB;IAC5C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,OAAO,gBAAgB,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA6B,EAC7B,OAA4B,EAC5B,WAAmC;IAEnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,MAAM,WAAW,CAAC,WAAW,CAAC;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI;SACL,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ThreadInventoryGateway } from '../../../modules/review-execution/entities/threadInventory/threadInventory.gateway.js';
|
|
2
|
+
export interface PinnedMergeRequest {
|
|
3
|
+
projectPath: string;
|
|
4
|
+
mrNumber: number;
|
|
5
|
+
}
|
|
6
|
+
interface InventoryLogger {
|
|
7
|
+
error: (obj: object, message: string) => void;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Resolves the authenticated MR thread inventory, fail-closed.
|
|
11
|
+
*
|
|
12
|
+
* The inventory is built ONLY from the authenticated gateway, never from the
|
|
13
|
+
* inbound webhook payload. It is either provably complete (every advertised page
|
|
14
|
+
* followed) or provably empty. Any failure — fetch error, page-count mismatch,
|
|
15
|
+
* undelivered page — resolves to the empty set with no payload/partial fallback.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveThreadInventory(gateway: ThreadInventoryGateway, pinned: PinnedMergeRequest, logger: InventoryLogger): ReadonlySet<string>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=resolveThreadInventory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveThreadInventory.d.ts","sourceRoot":"","sources":["../../../../src/modules/review-execution/services/resolveThreadInventory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gFAAgF,CAAA;AAE5H,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9C;AAID;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,eAAe,GACtB,WAAW,CAAC,MAAM,CAAC,CAsCrB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const MAX_PAGES = 100;
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the authenticated MR thread inventory, fail-closed.
|
|
4
|
+
*
|
|
5
|
+
* The inventory is built ONLY from the authenticated gateway, never from the
|
|
6
|
+
* inbound webhook payload. It is either provably complete (every advertised page
|
|
7
|
+
* followed) or provably empty. Any failure — fetch error, page-count mismatch,
|
|
8
|
+
* undelivered page — resolves to the empty set with no payload/partial fallback.
|
|
9
|
+
*/
|
|
10
|
+
export function resolveThreadInventory(gateway, pinned, logger) {
|
|
11
|
+
try {
|
|
12
|
+
const first = gateway.fetchPage(pinned.projectPath, pinned.mrNumber, 1);
|
|
13
|
+
const totalPages = first.totalPages;
|
|
14
|
+
const ids = new Set(first.threadIds);
|
|
15
|
+
if (totalPages < 1 || totalPages > MAX_PAGES) {
|
|
16
|
+
logger.error({ projectPath: pinned.projectPath, mrNumber: pinned.mrNumber, totalPages }, 'thread inventory: implausible page count, failing closed to empty inventory');
|
|
17
|
+
return new Set();
|
|
18
|
+
}
|
|
19
|
+
for (let page = 2; page <= totalPages; page++) {
|
|
20
|
+
const next = gateway.fetchPage(pinned.projectPath, pinned.mrNumber, page);
|
|
21
|
+
if (next.totalPages !== totalPages) {
|
|
22
|
+
logger.error({ projectPath: pinned.projectPath, mrNumber: pinned.mrNumber, page }, 'thread inventory: page-count mismatch, failing closed to empty inventory');
|
|
23
|
+
return new Set();
|
|
24
|
+
}
|
|
25
|
+
for (const id of next.threadIds)
|
|
26
|
+
ids.add(id);
|
|
27
|
+
}
|
|
28
|
+
return ids;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
logger.error({
|
|
32
|
+
projectPath: pinned.projectPath,
|
|
33
|
+
mrNumber: pinned.mrNumber,
|
|
34
|
+
error: error instanceof Error ? error.message : String(error),
|
|
35
|
+
}, 'thread inventory: fetch failed, failing closed to empty inventory');
|
|
36
|
+
return new Set();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=resolveThreadInventory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveThreadInventory.js","sourceRoot":"","sources":["../../../../src/modules/review-execution/services/resolveThreadInventory.ts"],"names":[],"mappings":"AAWA,MAAM,SAAS,GAAG,GAAG,CAAA;AAErB;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAA+B,EAC/B,MAA0B,EAC1B,MAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QACvE,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;QACnC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,KAAK,CAAC,SAAS,CAAC,CAAA;QAE5C,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,SAAS,EAAE,CAAC;YAC7C,MAAM,CAAC,KAAK,CACV,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,EAC1E,6EAA6E,CAC9E,CAAA;YACD,OAAO,IAAI,GAAG,EAAU,CAAA;QAC1B,CAAC;QAED,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YACzE,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACnC,MAAM,CAAC,KAAK,CACV,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,EACpE,0EAA0E,CAC3E,CAAA;gBACD,OAAO,IAAI,GAAG,EAAU,CAAA;YAC1B,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS;gBAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC9C,CAAC;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CACV;YACE,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,EACD,mEAAmE,CACpE,CAAA;QACD,OAAO,IAAI,GAAG,EAAU,CAAA;IAC1B,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ReviewAction } from '../../../modules/review-execution/entities/reviewAction/reviewAction.js';
|
|
2
2
|
import type { ExecutionResult, CommandExecutor } from '../../../modules/review-execution/entities/reviewAction/reviewAction.gateway.js';
|
|
3
|
+
import type { NoteCommentPostGateway } from '../../../modules/platform-integration/entities/noteComment/noteCommentPost.gateway.js';
|
|
3
4
|
/**
|
|
4
5
|
* @deprecated Use ReviewAction instead
|
|
5
6
|
*/
|
|
@@ -12,6 +13,15 @@ export interface ExecutionContext {
|
|
|
12
13
|
diffMetadata?: import('../../../modules/review-execution/entities/reviewContext/reviewContext.js').DiffMetadata;
|
|
13
14
|
}
|
|
14
15
|
export type { ExecutionResult, CommandExecutor };
|
|
16
|
+
export interface ExecuteThreadActionsOptions {
|
|
17
|
+
/**
|
|
18
|
+
* Skip the auto-path capability filter (SPEC-196). Set by the constrained
|
|
19
|
+
* dispatch chokepoint (SPEC-198), where provenance + authenticated-inventory
|
|
20
|
+
* validation has already bounded the surface and must NOT be re-narrowed by
|
|
21
|
+
* the auto-path read+postComment gate.
|
|
22
|
+
*/
|
|
23
|
+
skipAutoCapabilityFilter?: boolean;
|
|
24
|
+
}
|
|
15
25
|
interface Logger {
|
|
16
26
|
info: (obj: object, msg: string) => void;
|
|
17
27
|
warn: (obj: object, msg: string) => void;
|
|
@@ -21,6 +31,6 @@ interface Logger {
|
|
|
21
31
|
/**
|
|
22
32
|
* @deprecated Use GitLabReviewActionCliGateway or GitHubReviewActionCliGateway directly
|
|
23
33
|
*/
|
|
24
|
-
export declare function executeThreadActions(actions: ThreadAction[], context: ExecutionContext,
|
|
34
|
+
export declare function executeThreadActions(actions: ThreadAction[], context: ExecutionContext, logger: Logger, executor: CommandExecutor, postGateway?: NoteCommentPostGateway | null, options?: ExecuteThreadActionsOptions): Promise<ExecutionResult>;
|
|
25
35
|
export declare const defaultCommandExecutor: CommandExecutor;
|
|
26
36
|
//# sourceMappingURL=threadActionsExecutor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threadActionsExecutor.d.ts","sourceRoot":"","sources":["../../../../src/modules/review-execution/services/threadActionsExecutor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kEAAkE,CAAA;AAGpG,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAA+C,MAAM,0EAA0E,CAAA;
|
|
1
|
+
{"version":3,"file":"threadActionsExecutor.d.ts","sourceRoot":"","sources":["../../../../src/modules/review-execution/services/threadActionsExecutor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kEAAkE,CAAA;AAGpG,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAA+C,MAAM,0EAA0E,CAAA;AAC7K,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gFAAgF,CAAA;AAM5H;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,YAAY,CAAA;AAEvC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,OAAO,oEAAoE,EAAE,YAAY,CAAA;CACzG;AAED,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,CAAA;AAEhD,MAAM,WAAW,2BAA2B;IAC1C;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC;AAED,UAAU,MAAM;IACd,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,eAAe,EACzB,WAAW,GAAE,sBAAsB,GAAG,IAAW,EACjD,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,eAAe,CAAC,CA+C1B;AAED,eAAO,MAAM,sBAAsB,EAAE,eAUpC,CAAA"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { execSync } from 'node:child_process';
|
|
2
2
|
import { GitLabReviewActionCliGateway } from '../../../modules/review-execution/interface-adapters/gateways/cli/reviewAction.gitlab.cli.gateway.js';
|
|
3
3
|
import { GitHubReviewActionCliGateway } from '../../../modules/review-execution/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.js';
|
|
4
|
+
import { executePublicOutput, isPublicOutputAction } from '../../../modules/review-execution/services/publicOutputExecutor.js';
|
|
5
|
+
import { filterAutoExecutorActions } from '../../../modules/platform-integration/services/autoExecutorActionFilter.js';
|
|
4
6
|
const COMMAND_TIMEOUT_MS = 30000;
|
|
5
7
|
/**
|
|
6
8
|
* @deprecated Use GitLabReviewActionCliGateway or GitHubReviewActionCliGateway directly
|
|
7
9
|
*/
|
|
8
|
-
export async function executeThreadActions(actions, context,
|
|
10
|
+
export async function executeThreadActions(actions, context, logger, executor, postGateway = null, options = {}) {
|
|
9
11
|
const gatewayContext = {
|
|
10
12
|
projectPath: context.projectPath,
|
|
11
13
|
mrNumber: context.mrNumber,
|
|
@@ -13,10 +15,30 @@ export async function executeThreadActions(actions, context, _logger, executor)
|
|
|
13
15
|
diffMetadata: context.diffMetadata,
|
|
14
16
|
baseUrl: null,
|
|
15
17
|
};
|
|
18
|
+
let effectiveActions = actions;
|
|
19
|
+
if (!options.skipAutoCapabilityFilter) {
|
|
20
|
+
const { allowed, dropped } = filterAutoExecutorActions(actions);
|
|
21
|
+
if (dropped.length > 0) {
|
|
22
|
+
logger.warn({ droppedTypes: dropped.map(action => action.type) }, 'Auto executor dropped write-capable actions outside the read+postComment capability set');
|
|
23
|
+
}
|
|
24
|
+
effectiveActions = allowed;
|
|
25
|
+
}
|
|
16
26
|
const gateway = context.platform === 'gitlab'
|
|
17
27
|
? new GitLabReviewActionCliGateway(executor)
|
|
18
28
|
: new GitHubReviewActionCliGateway(executor);
|
|
19
|
-
|
|
29
|
+
if (postGateway === null) {
|
|
30
|
+
return gateway.execute(effectiveActions, gatewayContext);
|
|
31
|
+
}
|
|
32
|
+
const publicOutputActions = effectiveActions.filter(isPublicOutputAction);
|
|
33
|
+
const remainingActions = effectiveActions.filter(action => !isPublicOutputAction(action));
|
|
34
|
+
await executePublicOutput(publicOutputActions, { projectPath: context.projectPath, mrNumber: context.mrNumber }, postGateway);
|
|
35
|
+
const cliResult = await gateway.execute(remainingActions, gatewayContext);
|
|
36
|
+
return {
|
|
37
|
+
total: effectiveActions.length,
|
|
38
|
+
succeeded: cliResult.succeeded + publicOutputActions.length,
|
|
39
|
+
failed: cliResult.failed,
|
|
40
|
+
skipped: cliResult.skipped,
|
|
41
|
+
};
|
|
20
42
|
}
|
|
21
43
|
export const defaultCommandExecutor = (command, args, cwd) => {
|
|
22
44
|
execSync(`${command} ${args.map(a => `'${a.replace(/'/g, "'\\''")}'`).join(' ')}`, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threadActionsExecutor.js","sourceRoot":"","sources":["../../../../src/modules/review-execution/services/threadActionsExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,+FAA+F,CAAA;AAC5I,OAAO,EAAE,4BAA4B,EAAE,MAAM,+FAA+F,CAAA;AAG5I,MAAM,kBAAkB,GAAG,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"threadActionsExecutor.js","sourceRoot":"","sources":["../../../../src/modules/review-execution/services/threadActionsExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,12 @@ export interface GateClaudeInvocationInput {
|
|
|
17
17
|
job: ReviewJob;
|
|
18
18
|
triggerSource: TriggerSource;
|
|
19
19
|
processor: GateClaudeInvocationProcessor;
|
|
20
|
+
/**
|
|
21
|
+
* Trigger-actor provenance verdict (SPEC-197). When explicitly `false` the job
|
|
22
|
+
* is parked pending regardless of triggerMode: a non-trusted actor never
|
|
23
|
+
* auto-runs. `undefined`/`true` preserves the existing triggerMode behaviour.
|
|
24
|
+
*/
|
|
25
|
+
actorTrusted?: boolean;
|
|
20
26
|
}
|
|
21
27
|
export type GateClaudeInvocationResult = {
|
|
22
28
|
status: 'enqueued';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateClaudeInvocation.usecase.d.ts","sourceRoot":"","sources":["../../../../src/modules/review-execution/usecases/gateClaudeInvocation.usecase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0FAA0F,CAAC;AAC5I,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACd,MAAM,yFAAyF,CAAC;AAEjG,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAEpD,MAAM,MAAM,6BAA6B,GAAG,CAC1C,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,qBAAqB,GAAG,CAClC,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,6BAA6B,KACrC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,WAAW,gCAAgC;IAC/C,WAAW,EAAE,WAAW,CAAC;IACzB,2BAA2B,EAAE,2BAA2B,CAAC;IACzD,OAAO,EAAE,qBAAqB,CAAC;IAC/B,uBAAuB,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,SAAS,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"gateClaudeInvocation.usecase.d.ts","sourceRoot":"","sources":["../../../../src/modules/review-execution/usecases/gateClaudeInvocation.usecase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0FAA0F,CAAC;AAC5I,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACd,MAAM,yFAAyF,CAAC;AAEjG,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAEpD,MAAM,MAAM,6BAA6B,GAAG,CAC1C,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,qBAAqB,GAAG,CAClC,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,6BAA6B,KACrC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,WAAW,gCAAgC;IAC/C,WAAW,EAAE,WAAW,CAAC;IACzB,2BAA2B,EAAE,2BAA2B,CAAC;IACzD,OAAO,EAAE,qBAAqB,CAAC;IAC/B,uBAAuB,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,SAAS,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,6BAA6B,CAAC;IACzC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,0BAA0B,GAClC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAM3C,qBAAa,2BAA2B;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,gCAAgC;IAE7D,OAAO,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;CAkCrF"}
|
|
@@ -9,7 +9,8 @@ export class GateClaudeInvocationUseCase {
|
|
|
9
9
|
}
|
|
10
10
|
async execute(input) {
|
|
11
11
|
const { triggerMode, pendingReviewRequestGateway, enqueue, broadcastPendingChanged, logger } = this.deps;
|
|
12
|
-
|
|
12
|
+
const actorParks = input.actorTrusted === false;
|
|
13
|
+
if (triggerMode === 'full-auto' && !actorParks) {
|
|
13
14
|
const enqueued = await enqueue(input.job, input.processor);
|
|
14
15
|
if (!enqueued) {
|
|
15
16
|
logger.info({ jobId: input.job.id }, 'Job rejected by queue (deduplicated or already active)');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateClaudeInvocation.usecase.js","sourceRoot":"","sources":["../../../../src/modules/review-execution/usecases/gateClaudeInvocation.usecase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"gateClaudeInvocation.usecase.js","sourceRoot":"","sources":["../../../../src/modules/review-execution/usecases/gateClaudeInvocation.usecase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AA6CnE,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,WAAW,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,OAAO,2BAA2B;IACT;IAA7B,YAA6B,IAAsC;QAAtC,SAAI,GAAJ,IAAI,CAAkC;IAAG,CAAC;IAEvE,KAAK,CAAC,OAAO,CAAC,KAAgC;QAC5C,MAAM,EAAE,WAAW,EAAE,2BAA2B,EAAE,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAEzG,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC;QAEhD,IAAI,WAAW,KAAK,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,wDAAwD,CAAC,CAAC;gBAC/F,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,wDAAwD,EAAE,CAAC;YAClG,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACrD,CAAC;QAED,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1E,MAAM,OAAO,GAAyB;YACpC,sBAAsB,EAAE,SAAS;YACjC,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ;YACtC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ;YAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,SAAS;SACV,CAAC;QAEF,MAAM,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CACT,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,EACtE,+DAA+D,CAChE,CAAC;QAEF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads the current GitLab webhook token from the process environment on every
|
|
3
|
+
* call so the secret can be rotated without redeploying or restarting the
|
|
4
|
+
* process: an operator updates GITLAB_WEBHOOK_TOKEN (and the GitLab webhook
|
|
5
|
+
* secret), and the next verification already uses the new value.
|
|
6
|
+
*/
|
|
7
|
+
export declare function currentGitlabWebhookToken(): string | null;
|
|
8
|
+
export declare function __resetGitlabTokenCacheForTests(): void;
|
|
9
|
+
//# sourceMappingURL=gitlabWebhookTokenSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlabWebhookTokenSource.d.ts","sourceRoot":"","sources":["../../src/security/gitlabWebhookTokenSource.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,IAAI,CAGzD;AAED,wBAAgB,+BAA+B,IAAI,IAAI,CAGtD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads the current GitLab webhook token from the process environment on every
|
|
3
|
+
* call so the secret can be rotated without redeploying or restarting the
|
|
4
|
+
* process: an operator updates GITLAB_WEBHOOK_TOKEN (and the GitLab webhook
|
|
5
|
+
* secret), and the next verification already uses the new value.
|
|
6
|
+
*/
|
|
7
|
+
export function currentGitlabWebhookToken() {
|
|
8
|
+
const token = process.env.GITLAB_WEBHOOK_TOKEN;
|
|
9
|
+
return typeof token === 'string' && token.length > 0 ? token : null;
|
|
10
|
+
}
|
|
11
|
+
export function __resetGitlabTokenCacheForTests() {
|
|
12
|
+
// No cache is kept; the token is read fresh on every call. This hook exists
|
|
13
|
+
// so rotation tests document the no-capture contract explicitly.
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=gitlabWebhookTokenSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitlabWebhookTokenSource.js","sourceRoot":"","sources":["../../src/security/gitlabWebhookTokenSource.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC7C,4EAA4E;IAC5E,iEAAiE;AACnE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TransportGuardConfig } from '../modules/platform-integration/interface-adapters/controllers/webhook/transportGuard.middleware.js';
|
|
2
|
+
export declare const DEFAULT_LOOPBACK_HOP = "127.0.0.1";
|
|
3
|
+
/**
|
|
4
|
+
* The single trusted hop the app accepts connections from. Scoped to the
|
|
5
|
+
* loopback reverse proxy only; never a broad subnet, never `true`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveTrustedHopAddress(): string;
|
|
8
|
+
export declare function resolveAllowedCidrRanges(): string[];
|
|
9
|
+
export declare function resolveTransportGuardConfig(): TransportGuardConfig;
|
|
10
|
+
/**
|
|
11
|
+
* The value handed to Fastify's `trustProxy` option. It is always the single
|
|
12
|
+
* loopback hop, never `true` and never an arbitrary/broad value, so Express-style
|
|
13
|
+
* derived request attributes cannot be inflated from client-supplied headers.
|
|
14
|
+
*/
|
|
15
|
+
export declare function transportTrustProxyValue(): string;
|
|
16
|
+
//# sourceMappingURL=transportGuardConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transportGuardConfig.d.ts","sourceRoot":"","sources":["../../src/security/transportGuardConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oGAAoG,CAAC;AAE/I,eAAO,MAAM,oBAAoB,cAAc,CAAC;AAYhD;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAKjD;AAED,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAEnD;AAED,wBAAgB,2BAA2B,IAAI,oBAAoB,CAKlE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export const DEFAULT_LOOPBACK_HOP = '127.0.0.1';
|
|
2
|
+
function parseCidrRanges(raw) {
|
|
3
|
+
if (!raw) {
|
|
4
|
+
return [];
|
|
5
|
+
}
|
|
6
|
+
return raw
|
|
7
|
+
.split(',')
|
|
8
|
+
.map((range) => range.trim())
|
|
9
|
+
.filter((range) => range.length > 0);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The single trusted hop the app accepts connections from. Scoped to the
|
|
13
|
+
* loopback reverse proxy only; never a broad subnet, never `true`.
|
|
14
|
+
*/
|
|
15
|
+
export function resolveTrustedHopAddress() {
|
|
16
|
+
const configured = process.env.WEBHOOK_TRUSTED_HOP;
|
|
17
|
+
return typeof configured === 'string' && configured.length > 0
|
|
18
|
+
? configured
|
|
19
|
+
: DEFAULT_LOOPBACK_HOP;
|
|
20
|
+
}
|
|
21
|
+
export function resolveAllowedCidrRanges() {
|
|
22
|
+
return parseCidrRanges(process.env.WEBHOOK_ALLOWED_CIDR_RANGES);
|
|
23
|
+
}
|
|
24
|
+
export function resolveTransportGuardConfig() {
|
|
25
|
+
return {
|
|
26
|
+
trustedHopAddress: resolveTrustedHopAddress(),
|
|
27
|
+
allowedCidrRanges: resolveAllowedCidrRanges(),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The value handed to Fastify's `trustProxy` option. It is always the single
|
|
32
|
+
* loopback hop, never `true` and never an arbitrary/broad value, so Express-style
|
|
33
|
+
* derived request attributes cannot be inflated from client-supplied headers.
|
|
34
|
+
*/
|
|
35
|
+
export function transportTrustProxyValue() {
|
|
36
|
+
return resolveTrustedHopAddress();
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=transportGuardConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transportGuardConfig.js","sourceRoot":"","sources":["../../src/security/transportGuardConfig.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEhD,SAAS,eAAe,CAAC,GAAuB;IAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,GAAG;SACP,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACnD,OAAO,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAC5D,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,oBAAoB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,iBAAiB,EAAE,wBAAwB,EAAE;QAC7C,iBAAiB,EAAE,wBAAwB,EAAE;KAC9C,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,wBAAwB,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -4,8 +4,10 @@ export interface VerificationResult {
|
|
|
4
4
|
error?: string;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
|
-
* Verify GitLab webhook signature
|
|
8
|
-
* GitLab uses a simple secret token sent in the X-Gitlab-Token header
|
|
7
|
+
* Verify GitLab webhook signature.
|
|
8
|
+
* GitLab uses a simple secret token sent in the X-Gitlab-Token header.
|
|
9
|
+
* The expected token is read from the current configuration on every call so it
|
|
10
|
+
* can be rotated without restarting the process (see gitlabWebhookTokenSource).
|
|
9
11
|
*/
|
|
10
12
|
export declare function verifyGitLabSignature(request: FastifyRequest): VerificationResult;
|
|
11
13
|
/**
|
|
@@ -17,5 +19,10 @@ export declare function verifyGitHubSignature(request: FastifyRequest): Verifica
|
|
|
17
19
|
* Extract event type from request headers
|
|
18
20
|
*/
|
|
19
21
|
export declare function getGitLabEventType(request: FastifyRequest): string | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Extract the per-event delivery identifier from request headers.
|
|
24
|
+
* Symmetric to getGitLabEventType; reads X-Gitlab-Event-UUID.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getGitLabEventUuid(request: FastifyRequest): string | undefined;
|
|
20
27
|
export declare function getGitHubEventType(request: FastifyRequest): string | undefined;
|
|
21
28
|
//# sourceMappingURL=verifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../src/security/verifier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../src/security/verifier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAcD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,kBAAkB,CAiBjF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,kBAAkB,CAkCjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAG9E"}
|
|
@@ -1,23 +1,32 @@
|
|
|
1
|
-
import { createHmac, timingSafeEqual } from 'node:crypto';
|
|
1
|
+
import { createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
2
|
import { loadEnvSecrets } from '../config/loader.js';
|
|
3
|
+
import { currentGitlabWebhookToken } from '../security/gitlabWebhookTokenSource.js';
|
|
4
|
+
// Per-process random key used only to fold both candidate and expected tokens
|
|
5
|
+
// into fixed-length digests before comparison. It never leaves the process and
|
|
6
|
+
// is not a secret in the trust model; its sole purpose is to make timingSafeEqual
|
|
7
|
+
// operate on equal-length inputs so no length-based oracle precedes the compare.
|
|
8
|
+
const comparisonKey = randomBytes(32);
|
|
9
|
+
function constantTimeStringEqual(candidate, expected) {
|
|
10
|
+
const candidateDigest = createHmac('sha256', comparisonKey).update(candidate).digest();
|
|
11
|
+
const expectedDigest = createHmac('sha256', comparisonKey).update(expected).digest();
|
|
12
|
+
return timingSafeEqual(candidateDigest, expectedDigest);
|
|
13
|
+
}
|
|
3
14
|
/**
|
|
4
|
-
* Verify GitLab webhook signature
|
|
5
|
-
* GitLab uses a simple secret token sent in the X-Gitlab-Token header
|
|
15
|
+
* Verify GitLab webhook signature.
|
|
16
|
+
* GitLab uses a simple secret token sent in the X-Gitlab-Token header.
|
|
17
|
+
* The expected token is read from the current configuration on every call so it
|
|
18
|
+
* can be rotated without restarting the process (see gitlabWebhookTokenSource).
|
|
6
19
|
*/
|
|
7
20
|
export function verifyGitLabSignature(request) {
|
|
8
21
|
const token = request.headers['x-gitlab-token'];
|
|
9
22
|
if (!token || typeof token !== 'string') {
|
|
10
23
|
return { valid: false, error: 'Header X-Gitlab-Token manquant' };
|
|
11
24
|
}
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
// Use timing-safe comparison to prevent timing attacks
|
|
15
|
-
const tokenBuffer = Buffer.from(token);
|
|
16
|
-
const expectedBuffer = Buffer.from(expectedToken);
|
|
17
|
-
if (tokenBuffer.length !== expectedBuffer.length) {
|
|
25
|
+
const expectedToken = currentGitlabWebhookToken();
|
|
26
|
+
if (expectedToken === null) {
|
|
18
27
|
return { valid: false, error: 'Token invalide' };
|
|
19
28
|
}
|
|
20
|
-
if (!
|
|
29
|
+
if (!constantTimeStringEqual(token, expectedToken)) {
|
|
21
30
|
return { valid: false, error: 'Token invalide' };
|
|
22
31
|
}
|
|
23
32
|
return { valid: true };
|
|
@@ -60,6 +69,14 @@ export function getGitLabEventType(request) {
|
|
|
60
69
|
const eventHeader = request.headers['x-gitlab-event'];
|
|
61
70
|
return typeof eventHeader === 'string' ? eventHeader : undefined;
|
|
62
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Extract the per-event delivery identifier from request headers.
|
|
74
|
+
* Symmetric to getGitLabEventType; reads X-Gitlab-Event-UUID.
|
|
75
|
+
*/
|
|
76
|
+
export function getGitLabEventUuid(request) {
|
|
77
|
+
const uuidHeader = request.headers['x-gitlab-event-uuid'];
|
|
78
|
+
return typeof uuidHeader === 'string' ? uuidHeader : undefined;
|
|
79
|
+
}
|
|
63
80
|
export function getGitHubEventType(request) {
|
|
64
81
|
const eventHeader = request.headers['x-github-event'];
|
|
65
82
|
return typeof eventHeader === 'string' ? eventHeader : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/security/verifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/security/verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { TransportContext } from '../../modules/platform-integration/entities/transport/transportContext.js';
|
|
2
|
+
export declare class TransportContextFactory {
|
|
3
|
+
static valid(overrides?: Partial<TransportContext>): TransportContext;
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=transportContext.factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transportContext.factory.d.ts","sourceRoot":"","sources":["../../../src/tests/factories/transportContext.factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uEAAuE,CAAC;AAI9G,qBAAa,uBAAuB;IAClC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAE,OAAO,CAAC,gBAAgB,CAAM,GAAG,gBAAgB;CAU1E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const TRUSTED_HOP = '127.0.0.1';
|
|
2
|
+
export class TransportContextFactory {
|
|
3
|
+
static valid(overrides = {}) {
|
|
4
|
+
return {
|
|
5
|
+
directSocketAddress: TRUSTED_HOP,
|
|
6
|
+
trustedHopAddress: TRUSTED_HOP,
|
|
7
|
+
forwardedProto: 'https',
|
|
8
|
+
resolvedClientIp: '10.20.30.40',
|
|
9
|
+
allowedCidrRanges: ['10.20.30.0/24'],
|
|
10
|
+
...overrides,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=transportContext.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transportContext.factory.js","sourceRoot":"","sources":["../../../src/tests/factories/transportContext.factory.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,WAAW,CAAC;AAEhC,MAAM,OAAO,uBAAuB;IAClC,MAAM,CAAC,KAAK,CAAC,YAAuC,EAAE;QACpD,OAAO;YACL,mBAAmB,EAAE,WAAW;YAChC,iBAAiB,EAAE,WAAW;YAC9B,cAAc,EAAE,OAAO;YACvB,gBAAgB,EAAE,aAAa;YAC/B,iBAAiB,EAAE,CAAC,eAAe,CAAC;YACpC,GAAG,SAAS;SACb,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { EgressScanGateway, EgressScanInput, EgressScanResult } from '../../modules/platform-integration/entities/egressScan/egressScan.gateway.js';
|
|
2
|
+
import type { EgressTraceGateway } from '../../modules/platform-integration/entities/egressScan/egressTrace.gateway.js';
|
|
3
|
+
import type { EgressScanTrace } from '../../modules/platform-integration/entities/egressScan/egressScan.gateway.js';
|
|
4
|
+
export declare class StubEgressScanGateway implements EgressScanGateway {
|
|
5
|
+
readonly calls: EgressScanInput[];
|
|
6
|
+
private result;
|
|
7
|
+
private shouldFail;
|
|
8
|
+
setResult(result: EgressScanResult): void;
|
|
9
|
+
setShouldFail(shouldFail: boolean): void;
|
|
10
|
+
scan(input: EgressScanInput): EgressScanResult;
|
|
11
|
+
}
|
|
12
|
+
export declare class StubEgressTraceGateway implements EgressTraceGateway {
|
|
13
|
+
readonly traces: EgressScanTrace[];
|
|
14
|
+
record(trace: EgressScanTrace): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=egressScan.stub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"egressScan.stub.d.ts","sourceRoot":"","sources":["../../../src/tests/stubs/egressScan.stub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EACjB,MAAM,0EAA0E,CAAC;AAClF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAC;AACpH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0EAA0E,CAAC;AAEhH,qBAAa,qBAAsB,YAAW,iBAAiB;IAC7D,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,CAAM;IACvC,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,UAAU,CAAS;IAE3B,SAAS,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAIzC,aAAa,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAIxC,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB;CAU/C;AAED,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAM;IAExC,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;CAGrC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export class StubEgressScanGateway {
|
|
2
|
+
calls = [];
|
|
3
|
+
result = null;
|
|
4
|
+
shouldFail = false;
|
|
5
|
+
setResult(result) {
|
|
6
|
+
this.result = result;
|
|
7
|
+
}
|
|
8
|
+
setShouldFail(shouldFail) {
|
|
9
|
+
this.shouldFail = shouldFail;
|
|
10
|
+
}
|
|
11
|
+
scan(input) {
|
|
12
|
+
this.calls.push(input);
|
|
13
|
+
if (this.shouldFail) {
|
|
14
|
+
throw new Error('scanner failure');
|
|
15
|
+
}
|
|
16
|
+
if (this.result === null) {
|
|
17
|
+
return { decision: 'pass', body: input.body };
|
|
18
|
+
}
|
|
19
|
+
return this.result;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class StubEgressTraceGateway {
|
|
23
|
+
traces = [];
|
|
24
|
+
record(trace) {
|
|
25
|
+
this.traces.push(trace);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=egressScan.stub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"egressScan.stub.js","sourceRoot":"","sources":["../../../src/tests/stubs/egressScan.stub.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,qBAAqB;IACvB,KAAK,GAAsB,EAAE,CAAC;IAC/B,MAAM,GAA4B,IAAI,CAAC;IACvC,UAAU,GAAG,KAAK,CAAC;IAE3B,SAAS,CAAC,MAAwB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,aAAa,CAAC,UAAmB;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,KAAsB;QACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,sBAAsB;IACxB,MAAM,GAAsB,EAAE,CAAC;IAExC,MAAM,CAAC,KAAsB;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IdempotencyStore } from '../../modules/platform-integration/entities/idempotency/idempotencyStore.gateway.js';
|
|
2
|
+
export declare class StubIdempotencyStore implements IdempotencyStore {
|
|
3
|
+
readonly recordedKeys: string[];
|
|
4
|
+
private readonly present;
|
|
5
|
+
recordIfAbsent(eventKey: string): Promise<boolean>;
|
|
6
|
+
get entryCount(): number;
|
|
7
|
+
has(eventKey: string): boolean;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=idempotencyStore.stub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotencyStore.stub.d.ts","sourceRoot":"","sources":["../../../src/tests/stubs/idempotencyStore.stub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iFAAiF,CAAC;AAExH,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAM;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAEvC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASxD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAG/B"}
|