Add Better Stack access review connector

Better Stack exposes team members and pending invitations through its
Uptime API. Wire it as an access-review connector so a Better Stack
team can be reviewed in access-review campaigns.

Better Stack has no third-party OAuth app for listing members (its
OAuth is an end-user MCP sign-in), so the connector authenticates with
a Bearer API token plus the team name that scopes the team-members
listing. The driver paginates /api/v2/team-members, maps roles and
invitation records into account records, and the source name is
resolved from the configured team.

This wires the full surface: the provider enum and migration, the
connector settings, the registry registration with the team-name extra
setting, the GraphQL input and resolver marshaling, the frontend field
mapping and connector logo, and cassette-backed driver tests.

Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com>
This commit is contained in:
Aurélien Sibiril
2026-06-08 23:08:42 +02:00
parent c71a090fe4
commit 29b72ebc3b
15 changed files with 529 additions and 0 deletions

View File

@@ -706,6 +706,21 @@ func (r *resendNameResolver) ResolveInstanceName(_ context.Context) (string, err
return "Resend", nil
}
// betterStackNameResolver returns the Better Stack team name captured when
// the API-key connector was created. The team name is the human-readable
// instance identifier, so no HTTP call is required.
type betterStackNameResolver struct {
teamName string
}
func NewBetterStackNameResolver(teamName string) NameResolver {
return &betterStackNameResolver{teamName: teamName}
}
func (r *betterStackNameResolver) ResolveInstanceName(_ context.Context) (string, error) {
return r.teamName, nil
}
// gitlabNameResolver resolves the GitLab group name.
type gitlabNameResolver struct {
httpClient *http.Client