Surface last_matched_at on all API surfaces

Add lastMatchedAt to the CookiePattern GraphQL type, MCP schema,
CLI view/list commands, and n8n get/getAll operations. Run
codegen to regenerate gqlgen models and MCP types.

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-05-04 16:05:42 +04:00
parent b89707d9d2
commit 54655c218b
8 changed files with 30 additions and 8 deletions

View File

@@ -50,6 +50,7 @@ export async function execute(
description
source
excluded
lastMatchedAt
createdAt
updatedAt
}

View File

@@ -85,6 +85,7 @@ export async function execute(
description
source
excluded
lastMatchedAt
createdAt
updatedAt
}

View File

@@ -38,6 +38,7 @@ query($id: ID!, $first: Int, $after: CursorKey) {
displayName
source
excluded
lastMatchedAt
}
}
pageInfo {
@@ -51,12 +52,13 @@ query($id: ID!, $first: Int, $after: CursorKey) {
`
type cookiePattern struct {
ID string `json:"id"`
Pattern string `json:"pattern"`
MatchType string `json:"matchType"`
DisplayName string `json:"displayName"`
Source string `json:"source"`
Excluded bool `json:"excluded"`
ID string `json:"id"`
Pattern string `json:"pattern"`
MatchType string `json:"matchType"`
DisplayName string `json:"displayName"`
Source string `json:"source"`
Excluded bool `json:"excluded"`
LastMatchedAt *string `json:"lastMatchedAt"`
}
func NewCmdList(f *cmdutil.Factory) *cobra.Command {
@@ -139,10 +141,14 @@ func NewCmdList(f *cmdutil.Factory) *cobra.Command {
if p.Excluded {
excluded = "yes"
}
rows = append(rows, []string{p.ID, p.Pattern, p.MatchType, p.DisplayName, p.Source, excluded})
lastMatched := ""
if p.LastMatchedAt != nil {
lastMatched = cmdutil.FormatTime(*p.LastMatchedAt)
}
rows = append(rows, []string{p.ID, p.Pattern, p.MatchType, p.DisplayName, p.Source, excluded, lastMatched})
}
t := cmdutil.NewTable("ID", "PATTERN", "MATCH TYPE", "DISPLAY NAME", "SOURCE", "EXCLUDED").Rows(rows...)
t := cmdutil.NewTable("ID", "PATTERN", "MATCH TYPE", "DISPLAY NAME", "SOURCE", "EXCLUDED", "LAST MATCHED").Rows(rows...)
_, _ = fmt.Fprintln(f.IOStreams.Out, t)
if totalCount > len(patterns) {

View File

@@ -37,6 +37,7 @@ query($id: ID!) {
description
source
excluded
lastMatchedAt
createdAt
updatedAt
}
@@ -55,6 +56,7 @@ type viewResponse struct {
Description *string `json:"description"`
Source string `json:"source"`
Excluded bool `json:"excluded"`
LastMatchedAt *string `json:"lastMatchedAt"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
} `json:"node"`
@@ -126,6 +128,9 @@ func NewCmdView(f *cmdutil.Factory) *cobra.Command {
if v.Description != nil && *v.Description != "" {
_, _ = fmt.Fprintf(out, "%s%s\n", label.Render("Description:"), *v.Description)
}
if v.LastMatchedAt != nil {
_, _ = fmt.Fprintf(out, "%s%s\n", label.Render("Last Matched:"), cmdutil.FormatTime(*v.LastMatchedAt))
}
_, _ = fmt.Fprintln(out)
_, _ = fmt.Fprintf(out, "%s%s\n", label.Render("Created:"), cmdutil.FormatTime(v.CreatedAt))
_, _ = fmt.Fprintf(out, "%s%s\n", label.Render("Updated:"), cmdutil.FormatTime(v.UpdatedAt))

View File

@@ -205,6 +205,7 @@ type CookiePattern implements Node {
source: CookieSource!
excluded: Boolean!
cookieCount: Int! @goField(forceResolver: true)
lastMatchedAt: Datetime
createdAt: Datetime!
updatedAt: Datetime!

View File

@@ -76,6 +76,7 @@ func NewCookiePattern(cp *coredata.CookiePattern) *CookiePattern {
Description: cp.Description,
Source: cp.Source,
Excluded: cp.Excluded,
LastMatchedAt: cp.LastMatchedAt,
CreatedAt: cp.CreatedAt,
UpdatedAt: cp.UpdatedAt,
}

View File

@@ -9185,6 +9185,12 @@ components:
excluded:
type: boolean
description: Whether this pattern is excluded from the consent banner
last_matched_at:
type:
- string
- "null"
format: date-time
description: Timestamp when a cookie last matched this pattern
created_at:
type: string
format: date-time

View File

@@ -32,6 +32,7 @@ func NewCookiePattern(p *coredata.CookiePattern) *CookiePattern {
Description: p.Description,
Source: CookiePatternSource(p.Source),
Excluded: p.Excluded,
LastMatchedAt: p.LastMatchedAt,
CreatedAt: p.CreatedAt,
UpdatedAt: p.UpdatedAt,
}