Add regenerateCookieBannerTrackerPolicy mutation

Expose a non-destructive re-trigger that re-arms tracker policy
generation for a banner that already has a published version, so the
tracker-policy worker regenerates the document after iterating on the
generator. RegenerateTrackerPolicy returns a conflict when nothing has
been published yet.

Wire it across all API surfaces per the api-surface rule: the console
GraphQL mutation and resolver, the MCP tool, the prb cookie-banner
regenerate-policy command, and the n8n operation, with console e2e
coverage for the success and no-published-version paths.

Signed-off-by: Émile Ré <emile@probo.com>
This commit is contained in:
Émile Ré
2026-06-03 13:37:59 +02:00
parent c763f83b13
commit e6866f88a0
10 changed files with 354 additions and 0 deletions

View File

@@ -5825,6 +5825,20 @@ func (r *Resolver) PublishCookieBannerVersionTool(ctx context.Context, req *mcp.
return nil, types.PublishCookieBannerVersionOutput{CookieBannerVersion: types.NewCookieBannerVersion(version)}, nil
}
func (r *Resolver) RegenerateCookieBannerTrackerPolicyTool(ctx context.Context, req *mcp.CallToolRequest, input *types.RegenerateCookieBannerTrackerPolicyInput) (*mcp.CallToolResult, types.RegenerateCookieBannerTrackerPolicyOutput, error) {
scope, err := r.Authorize(ctx, input.CookieBannerID, probo.ActionCookieBannerUpdate)
if err != nil {
return nil, types.RegenerateCookieBannerTrackerPolicyOutput{}, err
}
banner, err := r.cookieBanner.RegenerateTrackerPolicy(ctx, scope, input.CookieBannerID)
if err != nil {
return nil, types.RegenerateCookieBannerTrackerPolicyOutput{}, fmt.Errorf("cannot regenerate cookie banner tracker policy: %w", err)
}
return nil, types.RegenerateCookieBannerTrackerPolicyOutput{CookieBanner: types.NewCookieBanner(banner)}, nil
}
func (r *Resolver) ListCookieBannerVersionsTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListCookieBannerVersionsInput) (*mcp.CallToolResult, types.ListCookieBannerVersionsOutput, error) {
scope, err := r.Authorize(ctx, input.CookieBannerID, probo.ActionCookieBannerVersionList)
if err != nil {

View File

@@ -10358,6 +10358,22 @@ components:
cookie_banner_version:
$ref: "#/components/schemas/CookieBannerVersion"
RegenerateCookieBannerTrackerPolicyInput:
type: object
required:
- cookie_banner_id
properties:
cookie_banner_id:
$ref: "#/components/schemas/GID"
RegenerateCookieBannerTrackerPolicyOutput:
type: object
required:
- cookie_banner
properties:
cookie_banner:
$ref: "#/components/schemas/CookieBanner"
ListCookieBannerVersionsInput:
type: object
required:
@@ -13944,6 +13960,14 @@ tools:
$ref: "#/components/schemas/PublishCookieBannerVersionInput"
outputSchema:
$ref: "#/components/schemas/PublishCookieBannerVersionOutput"
- name: regenerateCookieBannerTrackerPolicy
description: Re-arm tracker policy generation for a cookie banner that already has a published version. Returns immediately; the policy document is regenerated in the background.
hints:
readonly: false
inputSchema:
$ref: "#/components/schemas/RegenerateCookieBannerTrackerPolicyInput"
outputSchema:
$ref: "#/components/schemas/RegenerateCookieBannerTrackerPolicyOutput"
- name: listCookieBannerVersions
description: List all versions for a cookie banner
hints: