Documentation
¶
Overview ¶
Package clerk provides Clerk authentication integration for pgsquash. It handles JWT v2 organization claims, user ID extraction, and RLS policy patterns.
Index ¶
- Constants
- type ClerkConfig
- type ClerkPlugin
- func (cp *ClerkPlugin) Detect(migrations []*types.Migration) bool
- func (cp *ClerkPlugin) DetectAuthPattern(stmt *types.Statement) string
- func (cp *ClerkPlugin) DetectPatterns(sql string) []plugins.Pattern
- func (cp *ClerkPlugin) EnrichStatement(ctx context.Context, stmt *types.Statement) error
- func (cp *ClerkPlugin) FixFunctionVolatility(ctx context.Context, functionSQL string) (string, error)
- func (cp *ClerkPlugin) GetConflictingPlugins() []string
- func (cp *ClerkPlugin) GetConsolidationRules() []plugins.ConsolidationRule
- func (cp *ClerkPlugin) GetRequiredExtensions() []string
- func (cp *ClerkPlugin) Initialize(ctx context.Context, config any) error
- func (cp *ClerkPlugin) InjectCompatibilityLayer(ctx context.Context) string
- func (cp *ClerkPlugin) ShouldPreserve(stmt *types.Statement) bool
- func (cp *ClerkPlugin) TransformSQL(ctx context.Context, sql string) (string, error)
- func (cp *ClerkPlugin) ValidateSchema(ctx context.Context, db *sql.DB) error
Constants ¶
const ( AuthPatternClerkJWTV2 = "clerk_jwt_v2" // Clerk JWT v2 with organization claims AuthPatternClerk = "clerk_auth" // Clerk generic patterns )
Clerk-specific auth pattern identifiers
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ClerkConfig ¶
type ClerkConfig struct {
Enabled bool `json:"enabled"`
JWTVersion string `json:"jwt_version"` // "v1" or "v2"
OrganizationSupport bool `json:"organization_support"` // Enable org claim handling
PublicMetadataSupport bool `json:"public_metadata_support"` // Enable public metadata
}
ClerkConfig holds Clerk-specific configuration
type ClerkPlugin ¶
type ClerkPlugin struct {
*plugins.BasePlugin
// contains filtered or unexported fields
}
ClerkPlugin implements Clerk authentication service integration
func NewClerkPlugin ¶
func NewClerkPlugin() *ClerkPlugin
NewClerkPlugin creates a new Clerk plugin instance
func (*ClerkPlugin) Detect ¶
func (cp *ClerkPlugin) Detect(migrations []*types.Migration) bool
Detect checks if migrations contain Clerk patterns Detection patterns (in order of specificity):
- JWT v2 organization claims: auth.jwt()->'o'->>'id'
- JWT v1/generic patterns: auth.jwt() with 'sub'
- Clerk helper functions: clerk_user_id(), clerk_is_admin()
func (*ClerkPlugin) DetectAuthPattern ¶
func (cp *ClerkPlugin) DetectAuthPattern(stmt *types.Statement) string
DetectAuthPattern analyzes a statement for Clerk authentication patterns
func (*ClerkPlugin) DetectPatterns ¶
func (cp *ClerkPlugin) DetectPatterns(sql string) []plugins.Pattern
DetectPatterns analyzes SQL for Clerk-specific patterns
func (*ClerkPlugin) EnrichStatement ¶
EnrichStatement adds Clerk-specific metadata to parsed statements
func (*ClerkPlugin) FixFunctionVolatility ¶
func (cp *ClerkPlugin) FixFunctionVolatility(ctx context.Context, functionSQL string) (string, error)
FixFunctionVolatility adds STABLE markers to Clerk auth functions Uses AST-based parsing for more accurate and maintainable transformations
func (*ClerkPlugin) GetConflictingPlugins ¶
func (cp *ClerkPlugin) GetConflictingPlugins() []string
GetConflictingPlugins returns plugins that conflict with Clerk
func (*ClerkPlugin) GetConsolidationRules ¶
func (cp *ClerkPlugin) GetConsolidationRules() []plugins.ConsolidationRule
GetConsolidationRules returns Clerk-specific consolidation rules
func (*ClerkPlugin) GetRequiredExtensions ¶
func (cp *ClerkPlugin) GetRequiredExtensions() []string
GetRequiredExtensions returns PostgreSQL extensions required by Clerk
func (*ClerkPlugin) Initialize ¶
func (cp *ClerkPlugin) Initialize(ctx context.Context, config any) error
Initialize configures the Clerk plugin with service-specific settings
func (*ClerkPlugin) InjectCompatibilityLayer ¶
func (cp *ClerkPlugin) InjectCompatibilityLayer(ctx context.Context) string
InjectCompatibilityLayer returns SQL to mock Clerk authentication for validation This creates:
- auth schema
- Common Clerk/Supabase roles (anon, authenticated, service_role)
- Mock auth.jwt() function returning Clerk JWT v2 payload
- Helper functions (current_user_id, current_organization_id, etc.)
func (*ClerkPlugin) ShouldPreserve ¶
func (cp *ClerkPlugin) ShouldPreserve(stmt *types.Statement) bool
ShouldPreserve determines if a statement should never be consolidated
func (*ClerkPlugin) TransformSQL ¶
TransformSQL performs Clerk-specific SQL transformations Currently delegates to FixFunctionVolatility
func (*ClerkPlugin) ValidateSchema ¶
ValidateSchema performs Clerk-specific schema validation