From 4e1ecd41c22e9aca255496e22d118d45cd9c80cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Sibiril?= <81782+aureliensibiril@users.noreply.github.com> Date: Sun, 26 Jul 2026 11:47:08 +0200 Subject: [PATCH] Link the 19 API-key access-review connector docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each of these providers ships an API-key connection path and a driver, but no Registration carried a DocumentationURL, so the console rendered no "how do I get this token" link on the connect dialog. probo.com now has a page per provider, so point each Registration at it. Slugs are passed explicitly rather than derived from the enum, per accessReviewDocsURL's contract, so BETTER_STACK maps to better-stack and INCIDENT_IO to incident-io. Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com> --- pkg/connector/provider/better_stack.go | 9 +++++---- pkg/connector/provider/brevo.go | 7 ++++--- pkg/connector/provider/clickhouse.go | 7 ++++--- pkg/connector/provider/grafana.go | 9 +++++---- pkg/connector/provider/incidentio.go | 7 ++++--- pkg/connector/provider/langfuse.go | 7 ++++--- pkg/connector/provider/mercury.go | 7 ++++--- pkg/connector/provider/metabase.go | 11 ++++++----- pkg/connector/provider/neon.go | 5 +++-- pkg/connector/provider/okta.go | 1 + pkg/connector/provider/one_password.go | 1 + pkg/connector/provider/pylon.go | 7 ++++--- pkg/connector/provider/qovery.go | 1 + pkg/connector/provider/render.go | 9 +++++---- pkg/connector/provider/sendgrid.go | 9 +++++---- pkg/connector/provider/signoz.go | 11 ++++++----- pkg/connector/provider/supabase.go | 9 +++++---- pkg/connector/provider/tailscale.go | 9 +++++---- pkg/connector/provider/tally.go | 9 +++++---- 19 files changed, 77 insertions(+), 58 deletions(-) diff --git a/pkg/connector/provider/better_stack.go b/pkg/connector/provider/better_stack.go index 54acbfb51..bf9d71d49 100644 --- a/pkg/connector/provider/better_stack.go +++ b/pkg/connector/provider/better_stack.go @@ -38,10 +38,11 @@ import ( // name that scopes the team-members listing. func betterStackRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderBetterStack, - DisplayName: "Better Stack", - SupportsAPIKey: true, - ProbeURL: "https://betterstack.com/api/v2/team-members", + Provider: coredata.ConnectorProviderBetterStack, + DisplayName: "Better Stack", + DocumentationURL: accessReviewDocsURL("better-stack"), + SupportsAPIKey: true, + ProbeURL: "https://betterstack.com/api/v2/team-members", APIKeyExtraSettings: []ExtraSetting{ {Key: "teamName", Label: "Team Name", Required: true}, }, diff --git a/pkg/connector/provider/brevo.go b/pkg/connector/provider/brevo.go index 6727935ba..f414eb73d 100644 --- a/pkg/connector/provider/brevo.go +++ b/pkg/connector/provider/brevo.go @@ -31,9 +31,10 @@ import ( func brevoRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderBrevo, - DisplayName: "Brevo", - SupportsAPIKey: true, + Provider: coredata.ConnectorProviderBrevo, + DisplayName: "Brevo", + DocumentationURL: accessReviewDocsURL("brevo"), + SupportsAPIKey: true, // Brevo authenticates with an API key sent in the api-key header // rather than Authorization: Bearer. APIKeyHeader makes the // APIKeyConnection send api-key instead and omit Authorization. There diff --git a/pkg/connector/provider/clickhouse.go b/pkg/connector/provider/clickhouse.go index b58dd89cb..2400bc0b0 100644 --- a/pkg/connector/provider/clickhouse.go +++ b/pkg/connector/provider/clickhouse.go @@ -31,9 +31,10 @@ import ( func clickhouseRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderClickHouse, - DisplayName: "ClickHouse Cloud", - SupportsAPIKey: true, + Provider: coredata.ConnectorProviderClickHouse, + DisplayName: "ClickHouse Cloud", + DocumentationURL: accessReviewDocsURL("clickhouse"), + SupportsAPIKey: true, // ClickHouse Cloud's control-plane API authenticates with HTTP Basic // auth where the credential is keyId:keySecret. APIKeyBasicAuthUserPass // makes the APIKeyConnection base64 the verbatim "keyId:keySecret" diff --git a/pkg/connector/provider/grafana.go b/pkg/connector/provider/grafana.go index 94370ba7e..a0903f8d6 100644 --- a/pkg/connector/provider/grafana.go +++ b/pkg/connector/provider/grafana.go @@ -34,10 +34,11 @@ import ( func grafanaRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderGrafana, - DisplayName: "Grafana", - SupportsAPIKey: true, - BuildProbeURL: buildGrafanaProbeURL, + Provider: coredata.ConnectorProviderGrafana, + DisplayName: "Grafana", + DocumentationURL: accessReviewDocsURL("grafana"), + SupportsAPIKey: true, + BuildProbeURL: buildGrafanaProbeURL, APIKeyExtraSettings: []ExtraSetting{ {Key: "baseUrl", Label: "Base URL", Required: true}, }, diff --git a/pkg/connector/provider/incidentio.go b/pkg/connector/provider/incidentio.go index 742e8ed52..8296ca026 100644 --- a/pkg/connector/provider/incidentio.go +++ b/pkg/connector/provider/incidentio.go @@ -31,9 +31,10 @@ import ( func incidentioRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderIncidentIO, - DisplayName: "incident.io", - SupportsAPIKey: true, + Provider: coredata.ConnectorProviderIncidentIO, + DisplayName: "incident.io", + DocumentationURL: accessReviewDocsURL("incident-io"), + SupportsAPIKey: true, // incident.io publishes an OAuth2 flow, but it is outbound-only (for // incident.io to call other apps), so access review authenticates // with an API key presented as Authorization: Bearer, the default diff --git a/pkg/connector/provider/langfuse.go b/pkg/connector/provider/langfuse.go index 6eb6881f0..5570b4098 100644 --- a/pkg/connector/provider/langfuse.go +++ b/pkg/connector/provider/langfuse.go @@ -34,9 +34,10 @@ import ( func langfuseRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderLangfuse, - DisplayName: "Langfuse", - SupportsAPIKey: true, + Provider: coredata.ConnectorProviderLangfuse, + DisplayName: "Langfuse", + DocumentationURL: accessReviewDocsURL("langfuse"), + SupportsAPIKey: true, // Langfuse's organization-scoped public API authenticates with HTTP // Basic auth where the credential is publicKey:secretKey. // APIKeyBasicAuthUserPass base64s the verbatim "publicKey:secretKey" the diff --git a/pkg/connector/provider/mercury.go b/pkg/connector/provider/mercury.go index c1aa4268e..8d27bca6d 100644 --- a/pkg/connector/provider/mercury.go +++ b/pkg/connector/provider/mercury.go @@ -31,9 +31,10 @@ import ( func mercuryRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderMercury, - DisplayName: "Mercury", - SupportsAPIKey: true, + Provider: coredata.ConnectorProviderMercury, + DisplayName: "Mercury", + DocumentationURL: accessReviewDocsURL("mercury"), + SupportsAPIKey: true, // Mercury authenticates with a self-serve API token presented as // Authorization: Bearer, the default APIKeyConnection scheme. There // is no third-party OAuth2 flow for the Users API. The token is diff --git a/pkg/connector/provider/metabase.go b/pkg/connector/provider/metabase.go index 5c3c22e66..e206577f2 100644 --- a/pkg/connector/provider/metabase.go +++ b/pkg/connector/provider/metabase.go @@ -34,11 +34,12 @@ import ( func metabaseRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderMetabase, - DisplayName: "Metabase", - SupportsAPIKey: true, - APIKeyHeader: "x-api-key", - BuildProbeURL: buildMetabaseProbeURL, + Provider: coredata.ConnectorProviderMetabase, + DisplayName: "Metabase", + DocumentationURL: accessReviewDocsURL("metabase"), + SupportsAPIKey: true, + APIKeyHeader: "x-api-key", + BuildProbeURL: buildMetabaseProbeURL, APIKeyExtraSettings: []ExtraSetting{ {Key: "instanceUrl", Label: "Instance URL", Required: true}, }, diff --git a/pkg/connector/provider/neon.go b/pkg/connector/provider/neon.go index 4c4380fd6..337c41e6a 100644 --- a/pkg/connector/provider/neon.go +++ b/pkg/connector/provider/neon.go @@ -32,8 +32,9 @@ import ( func neonRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderNeon, - DisplayName: "Neon", + Provider: coredata.ConnectorProviderNeon, + DisplayName: "Neon", + DocumentationURL: accessReviewDocsURL("neon"), // Neon's API authenticates with an API key (napi_...) presented // as Authorization: Bearer, the default APIKeyConnection scheme. // Neon's OAuth is partner-gated (manual application), so the diff --git a/pkg/connector/provider/okta.go b/pkg/connector/provider/okta.go index eb1ba58b6..56495661e 100644 --- a/pkg/connector/provider/okta.go +++ b/pkg/connector/provider/okta.go @@ -41,6 +41,7 @@ func oktaRegistration() *Registration { return &Registration{ Provider: coredata.ConnectorProviderOkta, DisplayName: "Okta", + DocumentationURL: accessReviewDocsURL("okta"), SupportsAPIKey: true, APIKeyAuthScheme: "SSWS", BuildProbeURL: buildOktaProbeURL, diff --git a/pkg/connector/provider/one_password.go b/pkg/connector/provider/one_password.go index 0f93e5c2e..aa1e62c11 100644 --- a/pkg/connector/provider/one_password.go +++ b/pkg/connector/provider/one_password.go @@ -35,6 +35,7 @@ func onePasswordRegistration() *Registration { return &Registration{ Provider: coredata.ConnectorProviderOnePassword, DisplayName: "1Password", + DocumentationURL: accessReviewDocsURL("one-password"), ProbeURL: "https://events.1password.com/api/v1/auditevents", SupportsAPIKey: true, SupportsClientCredentials: true, diff --git a/pkg/connector/provider/pylon.go b/pkg/connector/provider/pylon.go index 738c9e7a0..0a194432a 100644 --- a/pkg/connector/provider/pylon.go +++ b/pkg/connector/provider/pylon.go @@ -31,9 +31,10 @@ import ( func pylonRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderPylon, - DisplayName: "Pylon", - SupportsAPIKey: true, + Provider: coredata.ConnectorProviderPylon, + DisplayName: "Pylon", + DocumentationURL: accessReviewDocsURL("pylon"), + SupportsAPIKey: true, // Pylon authenticates with an account API token presented as // Authorization: Bearer, the default APIKeyConnection scheme. There // is no third-party OAuth2 flow for the Users API. The token is bound diff --git a/pkg/connector/provider/qovery.go b/pkg/connector/provider/qovery.go index f78b1f89c..1c4de4953 100644 --- a/pkg/connector/provider/qovery.go +++ b/pkg/connector/provider/qovery.go @@ -34,6 +34,7 @@ func qoveryRegistration() *Registration { return &Registration{ Provider: coredata.ConnectorProviderQovery, DisplayName: "Qovery", + DocumentationURL: accessReviewDocsURL("qovery"), SupportsAPIKey: true, APIKeyAuthScheme: "Token", BuildProbeURL: buildQoveryProbeURL, diff --git a/pkg/connector/provider/render.go b/pkg/connector/provider/render.go index c01942181..301920e85 100644 --- a/pkg/connector/provider/render.go +++ b/pkg/connector/provider/render.go @@ -39,10 +39,11 @@ import ( // omitted. func renderRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderRender, - DisplayName: "Render", - SupportsAPIKey: true, - BuildProbeURL: buildRenderProbeURL, + Provider: coredata.ConnectorProviderRender, + DisplayName: "Render", + DocumentationURL: accessReviewDocsURL("render"), + SupportsAPIKey: true, + BuildProbeURL: buildRenderProbeURL, APIKeyExtraSettings: []ExtraSetting{ {Key: "workspaceId", Label: "Workspace ID", Required: true}, }, diff --git a/pkg/connector/provider/sendgrid.go b/pkg/connector/provider/sendgrid.go index 35a14b0b0..6d196a1b7 100644 --- a/pkg/connector/provider/sendgrid.go +++ b/pkg/connector/provider/sendgrid.go @@ -31,10 +31,11 @@ import ( func sendgridRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderSendGrid, - DisplayName: "SendGrid", - ProbeURL: "https://api.sendgrid.com/v3/teammates?limit=1&offset=0", - SupportsAPIKey: true, + Provider: coredata.ConnectorProviderSendGrid, + DisplayName: "SendGrid", + DocumentationURL: accessReviewDocsURL("sendgrid"), + ProbeURL: "https://api.sendgrid.com/v3/teammates?limit=1&offset=0", + SupportsAPIKey: true, NewDriver: func(_ context.Context, c *http.Client, _ *coredata.Connector, logger *log.Logger) (drivers.Driver, error) { return drivers.NewSendGridDriver(c, logger.Named("sendgrid")), nil }, diff --git a/pkg/connector/provider/signoz.go b/pkg/connector/provider/signoz.go index 777eddf48..4dc484e8e 100644 --- a/pkg/connector/provider/signoz.go +++ b/pkg/connector/provider/signoz.go @@ -34,11 +34,12 @@ import ( func signozRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderSigNoz, - DisplayName: "SigNoz", - SupportsAPIKey: true, - APIKeyHeader: "SIGNOZ-API-KEY", - BuildProbeURL: buildSigNozProbeURL, + Provider: coredata.ConnectorProviderSigNoz, + DisplayName: "SigNoz", + DocumentationURL: accessReviewDocsURL("signoz"), + SupportsAPIKey: true, + APIKeyHeader: "SIGNOZ-API-KEY", + BuildProbeURL: buildSigNozProbeURL, APIKeyExtraSettings: []ExtraSetting{ {Key: "baseUrl", Label: "Base URL", Required: true}, }, diff --git a/pkg/connector/provider/supabase.go b/pkg/connector/provider/supabase.go index 948a86d50..698632c91 100644 --- a/pkg/connector/provider/supabase.go +++ b/pkg/connector/provider/supabase.go @@ -32,10 +32,11 @@ import ( func supabaseRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderSupabase, - DisplayName: "Supabase", - ProbeURL: "https://api.supabase.com/v1/organizations", - SupportsAPIKey: true, + Provider: coredata.ConnectorProviderSupabase, + DisplayName: "Supabase", + DocumentationURL: accessReviewDocsURL("supabase"), + ProbeURL: "https://api.supabase.com/v1/organizations", + SupportsAPIKey: true, APIKeyExtraSettings: []ExtraSetting{ {Key: "organizationSlug", Label: "Organization Slug", Required: true}, }, diff --git a/pkg/connector/provider/tailscale.go b/pkg/connector/provider/tailscale.go index 9a088cb92..225d35f38 100644 --- a/pkg/connector/provider/tailscale.go +++ b/pkg/connector/provider/tailscale.go @@ -31,10 +31,11 @@ import ( func tailscaleRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderTailscale, - DisplayName: "Tailscale", - SupportsAPIKey: true, - ProbeURL: "https://api.tailscale.com/api/v2/tailnet/-/users", + Provider: coredata.ConnectorProviderTailscale, + DisplayName: "Tailscale", + DocumentationURL: accessReviewDocsURL("tailscale"), + SupportsAPIKey: true, + ProbeURL: "https://api.tailscale.com/api/v2/tailnet/-/users", NewDriver: func(_ context.Context, c *http.Client, _ *coredata.Connector, _ *log.Logger) (drivers.Driver, error) { return drivers.NewTailscaleDriver(c), nil }, diff --git a/pkg/connector/provider/tally.go b/pkg/connector/provider/tally.go index e1ccf1197..e78c7345f 100644 --- a/pkg/connector/provider/tally.go +++ b/pkg/connector/provider/tally.go @@ -32,10 +32,11 @@ import ( func tallyRegistration() *Registration { return &Registration{ - Provider: coredata.ConnectorProviderTally, - DisplayName: "Tally", - ProbeURL: "https://api.tally.so/me", - SupportsAPIKey: true, + Provider: coredata.ConnectorProviderTally, + DisplayName: "Tally", + DocumentationURL: accessReviewDocsURL("tally"), + ProbeURL: "https://api.tally.so/me", + SupportsAPIKey: true, APIKeyExtraSettings: []ExtraSetting{ {Key: "organizationId", Label: "Organization ID", Required: true}, },