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:
@@ -777,6 +777,33 @@ func (r *mutationResolver) PublishCookieBannerVersion(ctx context.Context, input
|
||||
}, nil
|
||||
}
|
||||
|
||||
// RegenerateCookieBannerTrackerPolicy is the resolver for the regenerateCookieBannerTrackerPolicy field.
|
||||
func (r *mutationResolver) RegenerateCookieBannerTrackerPolicy(ctx context.Context, input types.RegenerateCookieBannerTrackerPolicyInput) (*types.RegenerateCookieBannerTrackerPolicyPayload, error) {
|
||||
scope, err := r.authorize(ctx, input.CookieBannerID, probo.ActionCookieBannerUpdate)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
banner, err := r.cookieBanner.RegenerateTrackerPolicy(ctx, scope, input.CookieBannerID)
|
||||
if err != nil {
|
||||
if errors.Is(err, cookiebanner.ErrBannerNotFound) {
|
||||
return nil, gqlutils.NotFound(ctx, err)
|
||||
}
|
||||
|
||||
if errors.Is(err, cookiebanner.ErrNoPublishedVersion) {
|
||||
return nil, gqlutils.Conflict(ctx, err)
|
||||
}
|
||||
|
||||
r.logger.ErrorCtx(ctx, "cannot regenerate cookie banner tracker policy", log.Error(err))
|
||||
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
return &types.RegenerateCookieBannerTrackerPolicyPayload{
|
||||
CookieBanner: types.NewCookieBanner(banner),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// CreateCookieCategory is the resolver for the createCookieCategory field.
|
||||
func (r *mutationResolver) CreateCookieCategory(ctx context.Context, input types.CreateCookieCategoryInput) (*types.CreateCookieCategoryPayload, error) {
|
||||
scope, err := r.authorize(ctx, input.CookieBannerID, probo.ActionCookieCategoryCreate)
|
||||
|
||||
@@ -607,6 +607,9 @@ extend type Mutation {
|
||||
publishCookieBannerVersion(
|
||||
input: PublishCookieBannerVersionInput!
|
||||
): PublishCookieBannerVersionPayload!
|
||||
regenerateCookieBannerTrackerPolicy(
|
||||
input: RegenerateCookieBannerTrackerPolicyInput!
|
||||
): RegenerateCookieBannerTrackerPolicyPayload!
|
||||
createCookieCategory(
|
||||
input: CreateCookieCategoryInput!
|
||||
): CreateCookieCategoryPayload!
|
||||
@@ -682,6 +685,10 @@ input PublishCookieBannerVersionInput {
|
||||
cookieBannerId: ID!
|
||||
}
|
||||
|
||||
input RegenerateCookieBannerTrackerPolicyInput {
|
||||
cookieBannerId: ID!
|
||||
}
|
||||
|
||||
input CreateCookieCategoryInput {
|
||||
cookieBannerId: ID!
|
||||
name: String!
|
||||
@@ -733,6 +740,10 @@ type PublishCookieBannerVersionPayload {
|
||||
cookieBanner: CookieBanner!
|
||||
}
|
||||
|
||||
type RegenerateCookieBannerTrackerPolicyPayload {
|
||||
cookieBanner: CookieBanner!
|
||||
}
|
||||
|
||||
type CreateCookieCategoryPayload {
|
||||
cookieCategoryEdge: CookieCategoryEdge!
|
||||
cookieBanner: CookieBanner!
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user