@rip-user/rls-debugger-mcp
Version:
AI-powered MCP server for debugging Supabase Row Level Security policies with Claude structured outputs
179 lines • 5.52 kB
TypeScript
import { z } from 'zod';
export interface RLSPolicy {
schemaname: string;
tablename: string;
policyname: string;
polpermissive: 'PERMISSIVE' | 'RESTRICTIVE';
policyrole: string;
polcmd: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'ALL';
policyqual: string | null;
policywithcheck: string | null;
}
export declare const RLSAnalysisSchema: z.ZodObject<{
scenario_summary: z.ZodString;
applicable_policies: z.ZodArray<z.ZodObject<{
table: z.ZodString;
policy_name: z.ZodString;
operation: z.ZodString;
condition: z.ZodString;
will_grant_access: z.ZodBoolean;
reason: z.ZodString;
policy_type: z.ZodEnum<["PERMISSIVE", "RESTRICTIVE"]>;
}, "strip", z.ZodTypeAny, {
table: string;
policy_name: string;
operation: string;
condition: string;
will_grant_access: boolean;
reason: string;
policy_type: "PERMISSIVE" | "RESTRICTIVE";
}, {
table: string;
policy_name: string;
operation: string;
condition: string;
will_grant_access: boolean;
reason: string;
policy_type: "PERMISSIVE" | "RESTRICTIVE";
}>, "many">;
policy_combination_logic: z.ZodString;
root_cause: z.ZodObject<{
issue: z.ZodString;
missing_condition: z.ZodOptional<z.ZodString>;
incorrect_policy: z.ZodOptional<z.ZodString>;
conflicting_policies: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
}, "strip", z.ZodTypeAny, {
issue: string;
missing_condition?: string | undefined;
incorrect_policy?: string | undefined;
conflicting_policies?: string[] | undefined;
}, {
issue: string;
missing_condition?: string | undefined;
incorrect_policy?: string | undefined;
conflicting_policies?: string[] | undefined;
}>;
required_relationships: z.ZodOptional<z.ZodArray<z.ZodObject<{
table: z.ZodString;
condition: z.ZodString;
exists: z.ZodBoolean;
verification_query: z.ZodString;
}, "strip", z.ZodTypeAny, {
table: string;
condition: string;
exists: boolean;
verification_query: string;
}, {
table: string;
condition: string;
exists: boolean;
verification_query: string;
}>, "many">>;
recommendations: z.ZodArray<z.ZodObject<{
action: z.ZodString;
sql: z.ZodOptional<z.ZodString>;
explanation: z.ZodString;
risk_level: z.ZodEnum<["low", "medium", "high"]>;
}, "strip", z.ZodTypeAny, {
action: string;
explanation: string;
risk_level: "low" | "medium" | "high";
sql?: string | undefined;
}, {
action: string;
explanation: string;
risk_level: "low" | "medium" | "high";
sql?: string | undefined;
}>, "many">;
}, "strip", z.ZodTypeAny, {
scenario_summary: string;
applicable_policies: {
table: string;
policy_name: string;
operation: string;
condition: string;
will_grant_access: boolean;
reason: string;
policy_type: "PERMISSIVE" | "RESTRICTIVE";
}[];
policy_combination_logic: string;
root_cause: {
issue: string;
missing_condition?: string | undefined;
incorrect_policy?: string | undefined;
conflicting_policies?: string[] | undefined;
};
recommendations: {
action: string;
explanation: string;
risk_level: "low" | "medium" | "high";
sql?: string | undefined;
}[];
required_relationships?: {
table: string;
condition: string;
exists: boolean;
verification_query: string;
}[] | undefined;
}, {
scenario_summary: string;
applicable_policies: {
table: string;
policy_name: string;
operation: string;
condition: string;
will_grant_access: boolean;
reason: string;
policy_type: "PERMISSIVE" | "RESTRICTIVE";
}[];
policy_combination_logic: string;
root_cause: {
issue: string;
missing_condition?: string | undefined;
incorrect_policy?: string | undefined;
conflicting_policies?: string[] | undefined;
};
recommendations: {
action: string;
explanation: string;
risk_level: "low" | "medium" | "high";
sql?: string | undefined;
}[];
required_relationships?: {
table: string;
condition: string;
exists: boolean;
verification_query: string;
}[] | undefined;
}>;
export type RLSAnalysis = z.infer<typeof RLSAnalysisSchema>;
export interface PolicyLogicTree {
table: string;
rls_enabled: boolean;
access_logic: string;
additional_restrictions: string;
permissive_policies: PolicyDetails[];
restrictive_policies: PolicyDetails[];
decision_flow: string;
}
export interface PolicyDetails {
name: string;
operation: string;
condition: string;
parsed: ParsedCondition;
}
export interface ParsedCondition {
requires_auth: boolean;
checks_relationships: boolean;
referenced_tables: string[];
joins: string[];
comparisons: string[];
}
export interface PolicyKnowledge {
type: 'policy_intent' | 'known_issue' | 'architectural_decision' | 'correction';
content: string;
tables: string[];
timestamp: string;
related_policies?: string[];
}
//# sourceMappingURL=types.d.ts.map