@soulbatical/tetra-core 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @soulbatical/tetra-core might be problematic. Click here for more details.
- package/dist/generators/rls-auditor.d.ts +39 -0
- package/dist/generators/rls-auditor.d.ts.map +1 -0
- package/dist/generators/rls-auditor.js +505 -0
- package/dist/generators/rls-auditor.js.map +1 -0
- package/dist/generators/rls-checker.d.ts +94 -0
- package/dist/generators/rls-checker.d.ts.map +1 -0
- package/dist/generators/rls-checker.js +215 -0
- package/dist/generators/rls-checker.js.map +1 -0
- package/dist/generators/rls-generator.d.ts +77 -0
- package/dist/generators/rls-generator.d.ts.map +1 -0
- package/dist/generators/rls-generator.js +402 -0
- package/dist/generators/rls-generator.js.map +1 -0
- package/dist/generators/rpc/detail-rpc-generator.d.ts +58 -0
- package/dist/generators/rpc/detail-rpc-generator.d.ts.map +1 -0
- package/dist/generators/rpc/detail-rpc-generator.js +163 -0
- package/dist/generators/rpc/detail-rpc-generator.js.map +1 -0
- package/dist/generators/rpc/index.d.ts +24 -0
- package/dist/generators/rpc/index.d.ts.map +1 -0
- package/dist/generators/rpc/index.js +20 -0
- package/dist/generators/rpc/index.js.map +1 -0
- package/dist/generators/rpc/rpc-generator.d.ts +150 -0
- package/dist/generators/rpc/rpc-generator.d.ts.map +1 -0
- package/dist/generators/rpc/rpc-generator.js +743 -0
- package/dist/generators/rpc/rpc-generator.js.map +1 -0
- package/dist/generators/rpc/templates/array.d.ts +29 -0
- package/dist/generators/rpc/templates/array.d.ts.map +1 -0
- package/dist/generators/rpc/templates/array.js +40 -0
- package/dist/generators/rpc/templates/array.js.map +1 -0
- package/dist/generators/rpc/templates/auth.d.ts +85 -0
- package/dist/generators/rpc/templates/auth.d.ts.map +1 -0
- package/dist/generators/rpc/templates/auth.js +233 -0
- package/dist/generators/rpc/templates/auth.js.map +1 -0
- package/dist/generators/rpc/templates/column.d.ts +39 -0
- package/dist/generators/rpc/templates/column.d.ts.map +1 -0
- package/dist/generators/rpc/templates/column.js +97 -0
- package/dist/generators/rpc/templates/column.js.map +1 -0
- package/dist/generators/rpc/templates/enum.d.ts +33 -0
- package/dist/generators/rpc/templates/enum.d.ts.map +1 -0
- package/dist/generators/rpc/templates/enum.js +93 -0
- package/dist/generators/rpc/templates/enum.js.map +1 -0
- package/dist/generators/rpc/templates/nullable.d.ts +31 -0
- package/dist/generators/rpc/templates/nullable.d.ts.map +1 -0
- package/dist/generators/rpc/templates/nullable.js +50 -0
- package/dist/generators/rpc/templates/nullable.js.map +1 -0
- package/dist/generators/rpc/templates/related.d.ts +47 -0
- package/dist/generators/rpc/templates/related.d.ts.map +1 -0
- package/dist/generators/rpc/templates/related.js +182 -0
- package/dist/generators/rpc/templates/related.js.map +1 -0
- package/dist/generators/rpc/templates/search.d.ts +42 -0
- package/dist/generators/rpc/templates/search.d.ts.map +1 -0
- package/dist/generators/rpc/templates/search.js +81 -0
- package/dist/generators/rpc/templates/search.js.map +1 -0
- package/dist/generators/rpc/templates/time.d.ts +44 -0
- package/dist/generators/rpc/templates/time.d.ts.map +1 -0
- package/dist/generators/rpc/templates/time.js +143 -0
- package/dist/generators/rpc/templates/time.js.map +1 -0
- package/dist/generators/rpc/utils.d.ts +58 -0
- package/dist/generators/rpc/utils.d.ts.map +1 -0
- package/dist/generators/rpc/utils.js +92 -0
- package/dist/generators/rpc/utils.js.map +1 -0
- package/dist/generators/rpc/validator.d.ts +21 -0
- package/dist/generators/rpc/validator.d.ts.map +1 -0
- package/dist/generators/rpc/validator.js +398 -0
- package/dist/generators/rpc/validator.js.map +1 -0
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/shared/auth/index.d.ts +1 -1
- package/dist/shared/auth/index.d.ts.map +1 -1
- package/dist/shared/auth/routes.d.ts +4 -1
- package/dist/shared/auth/routes.d.ts.map +1 -1
- package/dist/shared/auth/routes.js +83 -1
- package/dist/shared/auth/routes.js.map +1 -1
- package/dist/shared/auth/types.d.ts +24 -0
- package/dist/shared/auth/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-generator.js","sourceRoot":"","sources":["../../../src/generators/rpc/rpc-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array Filter Template
|
|
3
|
+
* For filters with array of UUIDs (e.g., ids filter for by-ids navigation)
|
|
4
|
+
*
|
|
5
|
+
* This enables filtering by multiple specific IDs:
|
|
6
|
+
* - WHERE id = ANY(p_ids)
|
|
7
|
+
* - No counts generated (IDs are specific, not countable categories)
|
|
8
|
+
*/
|
|
9
|
+
import { FilterConfig } from '../../../shared/types/feature-config.js';
|
|
10
|
+
/**
|
|
11
|
+
* Generate WHERE clause for array filter
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Input: { name: 'ids', type: 'array', dbField: 'id' }
|
|
15
|
+
* // Output: AND (p_ids IS NULL OR t.id = ANY(p_ids))
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateArrayWhere(filter: FilterConfig, tableName: string, aliasMap?: Record<string, string>): string;
|
|
18
|
+
/**
|
|
19
|
+
* Generate counts query for array filter
|
|
20
|
+
*
|
|
21
|
+
* Array filters (like 'ids') don't generate counts because:
|
|
22
|
+
* 1. They represent specific items, not categories
|
|
23
|
+
* 2. Counts would just be array.length (not useful)
|
|
24
|
+
* 3. Frontend already knows which items it requested
|
|
25
|
+
*
|
|
26
|
+
* Returns null to signal "no counts for this filter"
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateArrayCounts(_filter: FilterConfig): string | null;
|
|
29
|
+
//# sourceMappingURL=array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../../src/generators/rpc/templates/array.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGvE;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CASrH;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAGxE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Array Filter Template
|
|
3
|
+
* For filters with array of UUIDs (e.g., ids filter for by-ids navigation)
|
|
4
|
+
*
|
|
5
|
+
* This enables filtering by multiple specific IDs:
|
|
6
|
+
* - WHERE id = ANY(p_ids)
|
|
7
|
+
* - No counts generated (IDs are specific, not countable categories)
|
|
8
|
+
*/
|
|
9
|
+
import { escapeIdentifier, getTableAlias } from '../utils.js';
|
|
10
|
+
/**
|
|
11
|
+
* Generate WHERE clause for array filter
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Input: { name: 'ids', type: 'array', dbField: 'id' }
|
|
15
|
+
* // Output: AND (p_ids IS NULL OR t.id = ANY(p_ids))
|
|
16
|
+
*/
|
|
17
|
+
export function generateArrayWhere(filter, tableName, aliasMap) {
|
|
18
|
+
const paramName = `p_${filter.rpcParam || filter.name}`;
|
|
19
|
+
const column = escapeIdentifier(filter.dbField || filter.column || filter.name);
|
|
20
|
+
const alias = getTableAlias(tableName, aliasMap);
|
|
21
|
+
const arrayType = filter.sqlGeneration?.arrayType || 'uuid[]';
|
|
22
|
+
return `
|
|
23
|
+
-- ${filter.name} (array filter - ${arrayType.toUpperCase()})
|
|
24
|
+
AND (${paramName} IS NULL OR ${alias}.${column} = ANY(${paramName}))`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate counts query for array filter
|
|
28
|
+
*
|
|
29
|
+
* Array filters (like 'ids') don't generate counts because:
|
|
30
|
+
* 1. They represent specific items, not categories
|
|
31
|
+
* 2. Counts would just be array.length (not useful)
|
|
32
|
+
* 3. Frontend already knows which items it requested
|
|
33
|
+
*
|
|
34
|
+
* Returns null to signal "no counts for this filter"
|
|
35
|
+
*/
|
|
36
|
+
export function generateArrayCounts(_filter) {
|
|
37
|
+
// Array filters don't have counts - they're for specific item lookup
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=array.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../src/generators/rpc/templates/array.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB,EAAE,SAAiB,EAAE,QAAiC;IAC3G,MAAM,SAAS,GAAG,KAAK,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,SAAS,IAAI,QAAQ,CAAC;IAE9D,OAAO;WACE,MAAM,CAAC,IAAI,oBAAoB,SAAS,CAAC,WAAW,EAAE;aACpD,SAAS,eAAe,KAAK,IAAI,MAAM,UAAU,SAAS,IAAI,CAAC;AAC5E,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAqB;IACvD,qEAAqE;IACrE,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Check Template
|
|
3
|
+
* Generates security checks for RPC functions
|
|
4
|
+
*
|
|
5
|
+
* Access Levels determine DATA visibility (not feature access):
|
|
6
|
+
* - admin: Can see ALL org data (admin/owner role)
|
|
7
|
+
* - user: Can see only OWN data (everyone else: creator, customer, etc.)
|
|
8
|
+
* - creator: Sandboxed creator - sees own content + system + shared/public
|
|
9
|
+
* - public: No auth required (anonymous endpoints)
|
|
10
|
+
* - system: Backend service role only (internal operations)
|
|
11
|
+
*
|
|
12
|
+
* SECURITY MODEL (v3.19):
|
|
13
|
+
* - service_role key (auth.role()='service_role'): Full access for backend cron jobs
|
|
14
|
+
* - authenticated user (admin): Access based on auth_admin_organizations()
|
|
15
|
+
* - authenticated user (user): Access based on auth_user_organizations() + own data only
|
|
16
|
+
* - anon key: BLOCKED from admin endpoints (must authenticate)
|
|
17
|
+
* - direct DB connections (psql, MCP, systemDB): Full access via session_user check
|
|
18
|
+
*
|
|
19
|
+
* ============================================================================
|
|
20
|
+
* VERSION HISTORY - DO NOT REMOVE (prevents repeating past mistakes)
|
|
21
|
+
* ============================================================================
|
|
22
|
+
*
|
|
23
|
+
* v3.19 (January 19, 2026) - CURRENT
|
|
24
|
+
* - FIX: User access level now uses auth_user_organizations() instead of auth_admin_organizations()
|
|
25
|
+
* - REASON: Regular users (customers) are NOT admins, so auth_admin_organizations() returned empty
|
|
26
|
+
* - IMPACT: accessLevel='user' features now work for non-admin users
|
|
27
|
+
* - TESTED: Bas Leget (customer) can now see his HD charts
|
|
28
|
+
*
|
|
29
|
+
* v3.16 (January 16, 2026)
|
|
30
|
+
* - FIX: Use auth.role() instead of JWT claim for service_role detection
|
|
31
|
+
* - REASON: The Supabase JS client with service_role_key does NOT set the
|
|
32
|
+
* 'request.jwt.claim.role' setting! Only auth.role() correctly returns 'service_role'.
|
|
33
|
+
* - auth.role() = 'service_role' for Supabase JS client with service_role_key
|
|
34
|
+
* - session_user = 'postgres' for direct connections (systemDB, psql, MCP)
|
|
35
|
+
* - TESTED: get_orders_results works with service_role_key after this fix
|
|
36
|
+
*
|
|
37
|
+
* v3.15 (January 15, 2026)
|
|
38
|
+
* - FIX: Use session_user instead of current_user for service_role detection
|
|
39
|
+
* - REASON: In SECURITY DEFINER functions, current_user is ALWAYS the function
|
|
40
|
+
* owner (postgres), not the caller. This made v3.14 bypass security for anon users!
|
|
41
|
+
* - session_user = 'authenticator' for ALL PostgREST calls (anon AND authenticated)
|
|
42
|
+
* - session_user = 'postgres' for direct connections (systemDB, psql, MCP)
|
|
43
|
+
* - BUG: JWT claim check doesn't work for service_role_key (discovered in v3.16)
|
|
44
|
+
*
|
|
45
|
+
* v3.14 (January 15, 2026) - BROKEN, DO NOT USE
|
|
46
|
+
* - Added: SET search_path = '' for SECURITY DEFINER functions
|
|
47
|
+
* - Added: current_user = 'postgres' check for direct connections
|
|
48
|
+
* - BUG: current_user = 'postgres' in SECURITY DEFINER functions ALWAYS returns
|
|
49
|
+
* true because SECURITY DEFINER runs as the function owner, not the caller!
|
|
50
|
+
* - IMPACT: Anon users could bypass all auth checks and read ALL data
|
|
51
|
+
* - TEST THAT EXPOSED BUG:
|
|
52
|
+
* curl "https://xxx.supabase.co/rest/v1/rpc/get_users_public_results" \
|
|
53
|
+
* -H "apikey: ANON_KEY" -d '{"p_org_id": "xxx"}' → returned ALL users!
|
|
54
|
+
*
|
|
55
|
+
* v3.13 (January 15, 2026)
|
|
56
|
+
* - Added: Service role detection using JWT claim
|
|
57
|
+
* - Added: Anon blocking (must have auth_admin_organizations)
|
|
58
|
+
* - WORKED for PostgREST but NOT for direct DB connections (systemDB returned
|
|
59
|
+
* "Access denied: authentication required")
|
|
60
|
+
*
|
|
61
|
+
* v3.11-3.12
|
|
62
|
+
* - Added: public. prefix for Postgres v17 compatibility
|
|
63
|
+
* - Added: RPC includes with LATERAL JOINs
|
|
64
|
+
*
|
|
65
|
+
* ============================================================================
|
|
66
|
+
*/
|
|
67
|
+
export type AccessLevel = 'admin' | 'user' | 'creator' | 'public' | 'system';
|
|
68
|
+
export interface CreatorVisibilityConfig {
|
|
69
|
+
column: string;
|
|
70
|
+
publicValues: string[] | boolean;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Generate variable declarations for auth (v3.13)
|
|
74
|
+
* Must be called at start of DECLARE block
|
|
75
|
+
*/
|
|
76
|
+
export declare function generateAuthDeclarations(accessLevel: AccessLevel): string;
|
|
77
|
+
/**
|
|
78
|
+
* Generate auth check SQL (runs at start of function body)
|
|
79
|
+
*/
|
|
80
|
+
export declare function generateAuthCheck(accessLevel: AccessLevel): string;
|
|
81
|
+
/**
|
|
82
|
+
* Generate auth WHERE clause for data filtering
|
|
83
|
+
*/
|
|
84
|
+
export declare function generateAuthWhereClause(accessLevel: AccessLevel, tableAlias?: string, creatorVisibility?: CreatorVisibilityConfig, organizationIdField?: string): string;
|
|
85
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/generators/rpc/templates/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AAEH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7E,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;CAClC;AAkCD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAKzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CA6ElE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,WAAW,EACxB,UAAU,GAAE,MAAY,EACxB,iBAAiB,CAAC,EAAE,uBAAuB,EAC3C,mBAAmB,GAAE,MAA0B,GAC9C,MAAM,CAoDR"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Check Template
|
|
3
|
+
* Generates security checks for RPC functions
|
|
4
|
+
*
|
|
5
|
+
* Access Levels determine DATA visibility (not feature access):
|
|
6
|
+
* - admin: Can see ALL org data (admin/owner role)
|
|
7
|
+
* - user: Can see only OWN data (everyone else: creator, customer, etc.)
|
|
8
|
+
* - creator: Sandboxed creator - sees own content + system + shared/public
|
|
9
|
+
* - public: No auth required (anonymous endpoints)
|
|
10
|
+
* - system: Backend service role only (internal operations)
|
|
11
|
+
*
|
|
12
|
+
* SECURITY MODEL (v3.19):
|
|
13
|
+
* - service_role key (auth.role()='service_role'): Full access for backend cron jobs
|
|
14
|
+
* - authenticated user (admin): Access based on auth_admin_organizations()
|
|
15
|
+
* - authenticated user (user): Access based on auth_user_organizations() + own data only
|
|
16
|
+
* - anon key: BLOCKED from admin endpoints (must authenticate)
|
|
17
|
+
* - direct DB connections (psql, MCP, systemDB): Full access via session_user check
|
|
18
|
+
*
|
|
19
|
+
* ============================================================================
|
|
20
|
+
* VERSION HISTORY - DO NOT REMOVE (prevents repeating past mistakes)
|
|
21
|
+
* ============================================================================
|
|
22
|
+
*
|
|
23
|
+
* v3.19 (January 19, 2026) - CURRENT
|
|
24
|
+
* - FIX: User access level now uses auth_user_organizations() instead of auth_admin_organizations()
|
|
25
|
+
* - REASON: Regular users (customers) are NOT admins, so auth_admin_organizations() returned empty
|
|
26
|
+
* - IMPACT: accessLevel='user' features now work for non-admin users
|
|
27
|
+
* - TESTED: Bas Leget (customer) can now see his HD charts
|
|
28
|
+
*
|
|
29
|
+
* v3.16 (January 16, 2026)
|
|
30
|
+
* - FIX: Use auth.role() instead of JWT claim for service_role detection
|
|
31
|
+
* - REASON: The Supabase JS client with service_role_key does NOT set the
|
|
32
|
+
* 'request.jwt.claim.role' setting! Only auth.role() correctly returns 'service_role'.
|
|
33
|
+
* - auth.role() = 'service_role' for Supabase JS client with service_role_key
|
|
34
|
+
* - session_user = 'postgres' for direct connections (systemDB, psql, MCP)
|
|
35
|
+
* - TESTED: get_orders_results works with service_role_key after this fix
|
|
36
|
+
*
|
|
37
|
+
* v3.15 (January 15, 2026)
|
|
38
|
+
* - FIX: Use session_user instead of current_user for service_role detection
|
|
39
|
+
* - REASON: In SECURITY DEFINER functions, current_user is ALWAYS the function
|
|
40
|
+
* owner (postgres), not the caller. This made v3.14 bypass security for anon users!
|
|
41
|
+
* - session_user = 'authenticator' for ALL PostgREST calls (anon AND authenticated)
|
|
42
|
+
* - session_user = 'postgres' for direct connections (systemDB, psql, MCP)
|
|
43
|
+
* - BUG: JWT claim check doesn't work for service_role_key (discovered in v3.16)
|
|
44
|
+
*
|
|
45
|
+
* v3.14 (January 15, 2026) - BROKEN, DO NOT USE
|
|
46
|
+
* - Added: SET search_path = '' for SECURITY DEFINER functions
|
|
47
|
+
* - Added: current_user = 'postgres' check for direct connections
|
|
48
|
+
* - BUG: current_user = 'postgres' in SECURITY DEFINER functions ALWAYS returns
|
|
49
|
+
* true because SECURITY DEFINER runs as the function owner, not the caller!
|
|
50
|
+
* - IMPACT: Anon users could bypass all auth checks and read ALL data
|
|
51
|
+
* - TEST THAT EXPOSED BUG:
|
|
52
|
+
* curl "https://xxx.supabase.co/rest/v1/rpc/get_users_public_results" \
|
|
53
|
+
* -H "apikey: ANON_KEY" -d '{"p_org_id": "xxx"}' → returned ALL users!
|
|
54
|
+
*
|
|
55
|
+
* v3.13 (January 15, 2026)
|
|
56
|
+
* - Added: Service role detection using JWT claim
|
|
57
|
+
* - Added: Anon blocking (must have auth_admin_organizations)
|
|
58
|
+
* - WORKED for PostgREST but NOT for direct DB connections (systemDB returned
|
|
59
|
+
* "Access denied: authentication required")
|
|
60
|
+
*
|
|
61
|
+
* v3.11-3.12
|
|
62
|
+
* - Added: public. prefix for Postgres v17 compatibility
|
|
63
|
+
* - Added: RPC includes with LATERAL JOINs
|
|
64
|
+
*
|
|
65
|
+
* ============================================================================
|
|
66
|
+
*/
|
|
67
|
+
// v3.16: Service role detection - FIXED for Supabase JS client
|
|
68
|
+
//
|
|
69
|
+
// The problem with v3.15: The JWT claim check doesn't work for service_role_key!
|
|
70
|
+
// - current_setting('request.jwt.claim.role', true) returns EMPTY for service_role_key
|
|
71
|
+
// - But auth.role() correctly returns 'service_role'
|
|
72
|
+
//
|
|
73
|
+
// The fix: Use auth.role() instead of JWT claim check:
|
|
74
|
+
// - auth.role() = 'service_role' for Supabase JS client with service_role_key
|
|
75
|
+
// - session_user = 'postgres' for direct connections (systemDB, psql, MCP)
|
|
76
|
+
//
|
|
77
|
+
// Verified via test:
|
|
78
|
+
// - service_role_key: auth.role() = 'service_role' ✅, JWT claim = '' ❌
|
|
79
|
+
// - anon key: auth.role() = 'anon' (correctly blocked)
|
|
80
|
+
// - postgres direct: session_user = 'postgres' (allowed)
|
|
81
|
+
const SERVICE_ROLE_VAR = `v_is_service_role`;
|
|
82
|
+
const SERVICE_ROLE_DECLARATION = `
|
|
83
|
+
-- v3.16: Detect service_role for cron jobs, webhooks, and direct DB connections
|
|
84
|
+
-- CRITICAL: Use auth.role() (not JWT claim) because service_role_key doesn't set JWT claim!
|
|
85
|
+
-- auth.role() = 'service_role' for Supabase JS client with service_role_key
|
|
86
|
+
-- session_user = 'postgres' for direct connections (systemDB, psql, MCP - allowed)
|
|
87
|
+
${SERVICE_ROLE_VAR} boolean := (
|
|
88
|
+
auth.role() = 'service_role'
|
|
89
|
+
OR session_user = 'postgres'
|
|
90
|
+
);`;
|
|
91
|
+
// Helper: builds the base auth WHERE (admin orgs + system content + service role)
|
|
92
|
+
// v3.13: Service role sees ALL, authenticated users see their admin orgs
|
|
93
|
+
const baseAuthWhere = (t, orgField) => `${SERVICE_ROLE_VAR}
|
|
94
|
+
OR ${t}.${orgField} IN (SELECT public.auth_admin_organizations())
|
|
95
|
+
OR ${t}.${orgField} IS NULL`;
|
|
96
|
+
/**
|
|
97
|
+
* Generate variable declarations for auth (v3.13)
|
|
98
|
+
* Must be called at start of DECLARE block
|
|
99
|
+
*/
|
|
100
|
+
export function generateAuthDeclarations(accessLevel) {
|
|
101
|
+
if (accessLevel === 'public' || accessLevel === 'system') {
|
|
102
|
+
return '';
|
|
103
|
+
}
|
|
104
|
+
return SERVICE_ROLE_DECLARATION;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Generate auth check SQL (runs at start of function body)
|
|
108
|
+
*/
|
|
109
|
+
export function generateAuthCheck(accessLevel) {
|
|
110
|
+
if (accessLevel === 'public' || accessLevel === 'system') {
|
|
111
|
+
return '';
|
|
112
|
+
}
|
|
113
|
+
// v3.13: All non-public access levels need service_role detection
|
|
114
|
+
// Service role bypasses all checks (for cron jobs, webhooks)
|
|
115
|
+
// Anon users (no auth_admin_organizations) are blocked
|
|
116
|
+
if (accessLevel === 'creator') {
|
|
117
|
+
return `
|
|
118
|
+
-- 🔐 SECURITY CHECK: Creator Sandbox (v3.13)
|
|
119
|
+
-- Service role bypasses all checks (cron jobs, webhooks)
|
|
120
|
+
IF NOT ${SERVICE_ROLE_VAR} THEN
|
|
121
|
+
-- Not service role - must have valid creator organizations
|
|
122
|
+
IF NOT EXISTS (SELECT 1 FROM public.auth_creator_organizations()) THEN
|
|
123
|
+
RAISE EXCEPTION 'Access denied: authentication required'
|
|
124
|
+
USING ERRCODE = '42501';
|
|
125
|
+
END IF;
|
|
126
|
+
|
|
127
|
+
-- Verify org access if specific org requested
|
|
128
|
+
IF p_org_id IS NOT NULL AND p_org_id NOT IN (SELECT public.auth_creator_organizations()) THEN
|
|
129
|
+
RAISE EXCEPTION 'Access denied: not authorized for organization %', p_org_id
|
|
130
|
+
USING ERRCODE = '42501';
|
|
131
|
+
END IF;
|
|
132
|
+
END IF;
|
|
133
|
+
`;
|
|
134
|
+
}
|
|
135
|
+
if (accessLevel === 'user') {
|
|
136
|
+
return `
|
|
137
|
+
-- 🔐 SECURITY CHECK: User own data ONLY (v3.18)
|
|
138
|
+
-- User endpoints MUST provide userid and it MUST match auth.uid()
|
|
139
|
+
-- This ensures admins via user endpoints also only see their own data
|
|
140
|
+
-- Service role bypasses all checks (cron jobs, webhooks)
|
|
141
|
+
IF NOT ${SERVICE_ROLE_VAR} THEN
|
|
142
|
+
IF p_org_id IS NULL THEN
|
|
143
|
+
RAISE EXCEPTION 'Organization context required' USING ERRCODE = '42501';
|
|
144
|
+
END IF;
|
|
145
|
+
|
|
146
|
+
-- userid is REQUIRED for user-level access
|
|
147
|
+
IF p_userid IS NULL THEN
|
|
148
|
+
RAISE EXCEPTION 'User ID required for this endpoint' USING ERRCODE = '42501';
|
|
149
|
+
END IF;
|
|
150
|
+
|
|
151
|
+
-- userid MUST match the authenticated user (no viewing other users' data)
|
|
152
|
+
IF p_userid::uuid != auth.uid() THEN
|
|
153
|
+
RAISE EXCEPTION 'Access denied: can only access your own data' USING ERRCODE = '42501';
|
|
154
|
+
END IF;
|
|
155
|
+
|
|
156
|
+
-- User must be a member of the organization
|
|
157
|
+
IF p_org_id NOT IN (SELECT public.auth_user_organizations()) THEN
|
|
158
|
+
RAISE EXCEPTION 'Access denied: not a member of organization %', p_org_id
|
|
159
|
+
USING ERRCODE = '42501';
|
|
160
|
+
END IF;
|
|
161
|
+
END IF;
|
|
162
|
+
`;
|
|
163
|
+
}
|
|
164
|
+
// admin (default)
|
|
165
|
+
return `
|
|
166
|
+
-- 🔐 SECURITY CHECK: Admin access to organization (v3.13)
|
|
167
|
+
-- Service role bypasses all checks (cron jobs, webhooks)
|
|
168
|
+
IF NOT ${SERVICE_ROLE_VAR} THEN
|
|
169
|
+
-- Not service role - must have valid admin organizations
|
|
170
|
+
IF NOT EXISTS (SELECT 1 FROM public.auth_admin_organizations()) THEN
|
|
171
|
+
RAISE EXCEPTION 'Access denied: authentication required'
|
|
172
|
+
USING ERRCODE = '42501';
|
|
173
|
+
END IF;
|
|
174
|
+
|
|
175
|
+
-- Verify org access if specific org requested
|
|
176
|
+
IF p_org_id IS NOT NULL AND p_org_id NOT IN (SELECT public.auth_admin_organizations()) THEN
|
|
177
|
+
RAISE EXCEPTION 'Access denied: not authorized for organization %', p_org_id
|
|
178
|
+
USING ERRCODE = '42501';
|
|
179
|
+
END IF;
|
|
180
|
+
END IF;
|
|
181
|
+
`;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Generate auth WHERE clause for data filtering
|
|
185
|
+
*/
|
|
186
|
+
export function generateAuthWhereClause(accessLevel, tableAlias = 't', creatorVisibility, organizationIdField = 'organization_id') {
|
|
187
|
+
if (accessLevel === 'public' || accessLevel === 'system') {
|
|
188
|
+
return '';
|
|
189
|
+
}
|
|
190
|
+
const t = tableAlias;
|
|
191
|
+
const f = organizationIdField;
|
|
192
|
+
// admin: sees all org data via auth_admin_organizations()
|
|
193
|
+
if (accessLevel === 'admin') {
|
|
194
|
+
return `AND (
|
|
195
|
+
${baseAuthWhere(t, f)}
|
|
196
|
+
)`;
|
|
197
|
+
}
|
|
198
|
+
// user: sees only their OWN data - auth check already validates userid=auth.uid()
|
|
199
|
+
// The WHERE clause filters by org membership (auth_user_organizations)
|
|
200
|
+
// The p_userid filter (added by the generator) ensures only own records are returned
|
|
201
|
+
if (accessLevel === 'user') {
|
|
202
|
+
return `AND (
|
|
203
|
+
${SERVICE_ROLE_VAR}
|
|
204
|
+
OR ${t}.${f} IN (SELECT public.auth_user_organizations())
|
|
205
|
+
OR ${t}.${f} IS NULL
|
|
206
|
+
)`;
|
|
207
|
+
}
|
|
208
|
+
// creator: base + visibility filter for creator's org
|
|
209
|
+
// v3.13: Service role bypasses, authenticated sees admin/creator orgs + visibility
|
|
210
|
+
if (accessLevel === 'creator') {
|
|
211
|
+
let visibilityCondition = `${t}.visibility_level IN ('shared', 'public')`;
|
|
212
|
+
if (creatorVisibility) {
|
|
213
|
+
const { column, publicValues } = creatorVisibility;
|
|
214
|
+
if (typeof publicValues === 'boolean') {
|
|
215
|
+
visibilityCondition = `${t}.${column} = ${publicValues}`;
|
|
216
|
+
}
|
|
217
|
+
else if (Array.isArray(publicValues)) {
|
|
218
|
+
visibilityCondition = `${t}.${column} IN (${publicValues.map(v => `'${v}'`).join(', ')})`;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return `AND (
|
|
222
|
+
${SERVICE_ROLE_VAR}
|
|
223
|
+
OR ${t}.${f} IN (SELECT public.auth_admin_organizations())
|
|
224
|
+
OR ${t}.${f} IS NULL
|
|
225
|
+
OR (${t}.${f} IN (SELECT public.auth_creator_organizations()) AND ${visibilityCondition})
|
|
226
|
+
)`;
|
|
227
|
+
}
|
|
228
|
+
// fallback
|
|
229
|
+
return `AND (
|
|
230
|
+
${baseAuthWhere(t, f)}
|
|
231
|
+
)`;
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/generators/rpc/templates/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column Filter Template
|
|
3
|
+
* For filters with dynamic values from database (payment_method, etc.)
|
|
4
|
+
*/
|
|
5
|
+
import { FilterConfig } from '../../../shared/types/feature-config.js';
|
|
6
|
+
/**
|
|
7
|
+
* Generate WHERE clause for column filter
|
|
8
|
+
* Same as enum filter (values are dynamic, not predefined)
|
|
9
|
+
* Supports array columns with @> operator when isArrayColumn: true
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // Regular column:
|
|
13
|
+
* // Input: { name: 'payment_method', column: 'payment_method' }
|
|
14
|
+
* // Output: AND (p_payment_method IS NULL OR p_payment_method = 'all' OR payment_method = p_payment_method)
|
|
15
|
+
*
|
|
16
|
+
* // Array column:
|
|
17
|
+
* // Input: { name: 'delivery_type', column: 'delivery_type', sqlGeneration: { isArrayColumn: true } }
|
|
18
|
+
* // Output: AND (p_delivery_type IS NULL OR p_delivery_type = 'all' OR delivery_type @> ARRAY[p_delivery_type])
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateColumnWhere(filter: FilterConfig, tableName: string, aliasMap?: Record<string, string>): string;
|
|
21
|
+
/**
|
|
22
|
+
* Generate counts query for column filter
|
|
23
|
+
* Uses GROUP BY to get all unique values dynamically
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* // Input: { name: 'payment_method', column: 'payment_method' }
|
|
27
|
+
* // Output:
|
|
28
|
+
* // 'byPaymentMethod', (
|
|
29
|
+
* // SELECT jsonb_object_agg(payment_method, cnt)
|
|
30
|
+
* // FROM (
|
|
31
|
+
* // SELECT payment_method, COUNT(*)::int as cnt
|
|
32
|
+
* // FROM filtered_items
|
|
33
|
+
* // WHERE payment_method IS NOT NULL
|
|
34
|
+
* // GROUP BY payment_method
|
|
35
|
+
* // )
|
|
36
|
+
* // )
|
|
37
|
+
*/
|
|
38
|
+
export declare function generateColumnCounts(filter: FilterConfig): string;
|
|
39
|
+
//# sourceMappingURL=column.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../../src/generators/rpc/templates/column.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGvE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAqBtH;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA0CjE"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column Filter Template
|
|
3
|
+
* For filters with dynamic values from database (payment_method, etc.)
|
|
4
|
+
*/
|
|
5
|
+
import { escapeIdentifier, getTableAlias } from '../utils.js';
|
|
6
|
+
/**
|
|
7
|
+
* Generate WHERE clause for column filter
|
|
8
|
+
* Same as enum filter (values are dynamic, not predefined)
|
|
9
|
+
* Supports array columns with @> operator when isArrayColumn: true
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // Regular column:
|
|
13
|
+
* // Input: { name: 'payment_method', column: 'payment_method' }
|
|
14
|
+
* // Output: AND (p_payment_method IS NULL OR p_payment_method = 'all' OR payment_method = p_payment_method)
|
|
15
|
+
*
|
|
16
|
+
* // Array column:
|
|
17
|
+
* // Input: { name: 'delivery_type', column: 'delivery_type', sqlGeneration: { isArrayColumn: true } }
|
|
18
|
+
* // Output: AND (p_delivery_type IS NULL OR p_delivery_type = 'all' OR delivery_type @> ARRAY[p_delivery_type])
|
|
19
|
+
*/
|
|
20
|
+
export function generateColumnWhere(filter, tableName, aliasMap) {
|
|
21
|
+
const paramName = `p_${filter.rpcParam || filter.name}`;
|
|
22
|
+
const column = escapeIdentifier(filter.column);
|
|
23
|
+
const alias = getTableAlias(tableName, aliasMap);
|
|
24
|
+
// Check if this is an array column (use @> operator)
|
|
25
|
+
const isArrayColumn = filter.sqlGeneration?.isArrayColumn || false;
|
|
26
|
+
if (isArrayColumn) {
|
|
27
|
+
return `
|
|
28
|
+
-- ${filter.name} (column filter - array field, check if array contains value)
|
|
29
|
+
AND (${paramName} IS NULL OR ${paramName} = 'all' OR ${alias}.${column} @> ARRAY[${paramName}])`;
|
|
30
|
+
}
|
|
31
|
+
// Add ::text cast to avoid "column reference is ambiguous" errors
|
|
32
|
+
// when column and param have similar names (e.g., mime_type vs p_mime_type)
|
|
33
|
+
const columnRef = `${alias}.${column}::text`;
|
|
34
|
+
return `
|
|
35
|
+
-- ${filter.name} (column filter - dynamic values)
|
|
36
|
+
AND (${paramName} IS NULL OR ${paramName} = 'all' OR ${columnRef} = ${paramName})`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Generate counts query for column filter
|
|
40
|
+
* Uses GROUP BY to get all unique values dynamically
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* // Input: { name: 'payment_method', column: 'payment_method' }
|
|
44
|
+
* // Output:
|
|
45
|
+
* // 'byPaymentMethod', (
|
|
46
|
+
* // SELECT jsonb_object_agg(payment_method, cnt)
|
|
47
|
+
* // FROM (
|
|
48
|
+
* // SELECT payment_method, COUNT(*)::int as cnt
|
|
49
|
+
* // FROM filtered_items
|
|
50
|
+
* // WHERE payment_method IS NOT NULL
|
|
51
|
+
* // GROUP BY payment_method
|
|
52
|
+
* // )
|
|
53
|
+
* // )
|
|
54
|
+
*/
|
|
55
|
+
export function generateColumnCounts(filter) {
|
|
56
|
+
const countsKey = filter.countsKey || `by${filter.name.charAt(0).toUpperCase()}${filter.name.slice(1)}`;
|
|
57
|
+
let column = filter.column;
|
|
58
|
+
const isArrayColumn = filter.sqlGeneration?.isArrayColumn || false;
|
|
59
|
+
// Map joined columns to CTE aliases
|
|
60
|
+
if (column === 'o.status') {
|
|
61
|
+
column = 'order_status';
|
|
62
|
+
}
|
|
63
|
+
else if (column === 'o.source') {
|
|
64
|
+
column = 'order_source';
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
column = escapeIdentifier(column);
|
|
68
|
+
}
|
|
69
|
+
// Array columns need unnest() to expand values
|
|
70
|
+
if (isArrayColumn) {
|
|
71
|
+
const valueAlias = `${column.replace(/"/g, '')}_value`;
|
|
72
|
+
return `
|
|
73
|
+
'${countsKey}', (
|
|
74
|
+
SELECT jsonb_object_agg(${valueAlias}, cnt)
|
|
75
|
+
FROM (
|
|
76
|
+
SELECT unnest(${column}) as ${valueAlias}, COUNT(*)::int as cnt
|
|
77
|
+
FROM filtered_items
|
|
78
|
+
WHERE ${column} IS NOT NULL AND array_length(${column}, 1) > 0
|
|
79
|
+
GROUP BY ${valueAlias}
|
|
80
|
+
ORDER BY cnt DESC
|
|
81
|
+
) subquery
|
|
82
|
+
)`;
|
|
83
|
+
}
|
|
84
|
+
// Regular column counts
|
|
85
|
+
return `
|
|
86
|
+
'${countsKey}', (
|
|
87
|
+
SELECT jsonb_object_agg(${column}, cnt)
|
|
88
|
+
FROM (
|
|
89
|
+
SELECT ${column}, COUNT(*)::int as cnt
|
|
90
|
+
FROM filtered_items
|
|
91
|
+
WHERE ${column} IS NOT NULL
|
|
92
|
+
GROUP BY ${column}
|
|
93
|
+
ORDER BY cnt DESC
|
|
94
|
+
) subquery
|
|
95
|
+
)`;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=column.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column.js","sourceRoot":"","sources":["../../../../src/generators/rpc/templates/column.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAoB,EAAE,SAAiB,EAAE,QAAiC;IAC5G,MAAM,SAAS,GAAG,KAAK,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAO,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEjD,qDAAqD;IACrD,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,EAAE,aAAa,IAAI,KAAK,CAAC;IAEnE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO;WACA,MAAM,CAAC,IAAI;aACT,SAAS,eAAe,SAAS,eAAe,KAAK,IAAI,MAAM,aAAa,SAAS,IAAI,CAAC;IACrG,CAAC;IAED,kEAAkE;IAClE,4EAA4E;IAC5E,MAAM,SAAS,GAAG,GAAG,KAAK,IAAI,MAAM,QAAQ,CAAC;IAE7C,OAAO;WACE,MAAM,CAAC,IAAI;aACT,SAAS,eAAe,SAAS,eAAe,SAAS,MAAM,SAAS,GAAG,CAAC;AACzF,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACxG,IAAI,MAAM,GAAG,MAAM,CAAC,MAAO,CAAC;IAC5B,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,EAAE,aAAa,IAAI,KAAK,CAAC;IAEnE,oCAAoC;IACpC,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,MAAM,GAAG,cAAc,CAAC;IAC1B,CAAC;SAAM,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,GAAG,cAAc,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,+CAA+C;IAC/C,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC;QACvD,OAAO;OACJ,SAAS;gCACgB,UAAU;;wBAElB,MAAM,QAAQ,UAAU;;gBAEhC,MAAM,iCAAiC,MAAM;mBAC1C,UAAU;;;MAGvB,CAAC;IACL,CAAC;IAED,wBAAwB;IACxB,OAAO;OACF,SAAS;gCACgB,MAAM;;iBAErB,MAAM;;gBAEP,MAAM;mBACH,MAAM;;;MAGnB,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enum Filter Template
|
|
3
|
+
* For filters with predefined values (status, phase, etc.)
|
|
4
|
+
*/
|
|
5
|
+
import { FilterConfig } from '../../../shared/types/feature-config.js';
|
|
6
|
+
/**
|
|
7
|
+
* Generate WHERE clause for enum filter
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* // Input: { name: 'status', column: 'status', values: ['paid', 'pending'] }
|
|
11
|
+
* // Output: AND (p_status IS NULL OR p_status = 'all' OR status = p_status)
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateEnumWhere(filter: FilterConfig, tableName: string, aliasMap?: Record<string, string>): string;
|
|
14
|
+
/**
|
|
15
|
+
* Generate counts query for enum filter
|
|
16
|
+
* Uses UNION ALL pattern to ensure all values are present (even with count 0)
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Input: { name: 'status', values: ['paid', 'pending', 'cancelled'] }
|
|
20
|
+
* // Output:
|
|
21
|
+
* // 'byStatus', (
|
|
22
|
+
* // SELECT jsonb_object_agg(status_value, cnt)
|
|
23
|
+
* // FROM (
|
|
24
|
+
* // SELECT 'paid' as status_value, COUNT(*)::int as cnt FROM filtered_items WHERE status = 'paid'
|
|
25
|
+
* // UNION ALL
|
|
26
|
+
* // SELECT 'pending' as status_value, COUNT(*)::int as cnt FROM filtered_items WHERE status = 'pending'
|
|
27
|
+
* // UNION ALL
|
|
28
|
+
* // SELECT 'cancelled' as status_value, COUNT(*)::int as cnt FROM filtered_items WHERE status = 'cancelled'
|
|
29
|
+
* // )
|
|
30
|
+
* // )
|
|
31
|
+
*/
|
|
32
|
+
export declare function generateEnumCounts(filter: FilterConfig): string;
|
|
33
|
+
//# sourceMappingURL=enum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../../../src/generators/rpc/templates/enum.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAGvE;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CA0BpH;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAyC/D"}
|