@jmruthers/pace-core 0.6.2 → 0.6.4
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.
- package/CHANGELOG.md +45 -0
- package/cursor-rules/00-pace-core-compliance.mdc +34 -2
- package/dist/{AuthService-BPvc3Ka0.d.ts → AuthService-Cb34EQs3.d.ts} +9 -1
- package/dist/{DataTable-TPTKCX4D.js → DataTable-E7YQZD7D.js} +9 -8
- package/dist/{PublicPageProvider-DC6kCaqf.d.ts → PublicPageProvider-DEMpysFR.d.ts} +45 -67
- package/dist/{UnifiedAuthProvider-CVcTjx-d.d.ts → UnifiedAuthProvider-CKvHP1MK.d.ts} +1 -8
- package/dist/{UnifiedAuthProvider-CH6Z342H.js → UnifiedAuthProvider-QPXO24B4.js} +5 -4
- package/dist/{api-MVVQZLJI.js → api-6LVZTHDS.js} +10 -10
- package/dist/{audit-B5P6FFIR.js → audit-V53FV5AG.js} +2 -2
- package/dist/chunk-36LVWXB2.js +227 -0
- package/dist/chunk-36LVWXB2.js.map +1 -0
- package/dist/{chunk-24UVZUZG.js → chunk-3LPHPB62.js} +129 -387
- package/dist/chunk-3LPHPB62.js.map +1 -0
- package/dist/{chunk-2UOI2FG5.js → chunk-5EC5MEWX.js} +4 -4
- package/dist/{chunk-3XC4CPTD.js → chunk-7JPAB3T5.js} +244 -5727
- package/dist/chunk-7JPAB3T5.js.map +1 -0
- package/dist/{chunk-6J4GEEJR.js → chunk-ATKZM7RX.js} +53 -27
- package/dist/chunk-ATKZM7RX.js.map +1 -0
- package/dist/{chunk-EHMR7VYL.js → chunk-AVMLPIM7.js} +443 -189
- package/dist/chunk-AVMLPIM7.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +11 -0
- package/dist/{chunk-NECFR5MM.js → chunk-I6DAQMWX.js} +575 -647
- package/dist/chunk-I6DAQMWX.js.map +1 -0
- package/dist/{chunk-F2IMUDXZ.js → chunk-M7MPQISP.js} +2 -2
- package/dist/{chunk-XWQCNGTQ.js → chunk-NN6WWZ5U.js} +173 -79
- package/dist/chunk-NN6WWZ5U.js.map +1 -0
- package/dist/{chunk-MMZ7JXPU.js → chunk-OEWDTMG7.js} +13 -21
- package/dist/{chunk-MMZ7JXPU.js.map → chunk-OEWDTMG7.js.map} +1 -1
- package/dist/{chunk-SFZUDBL5.js → chunk-YKRAFF5K.js} +70 -56
- package/dist/chunk-YKRAFF5K.js.map +1 -0
- package/dist/components.d.ts +2 -2
- package/dist/components.js +12 -13
- package/dist/contextValidator-OOPCLPZW.js +9 -0
- package/dist/contextValidator-OOPCLPZW.js.map +1 -0
- package/dist/eslint-rules/pace-core-compliance.cjs +106 -0
- package/dist/hooks.d.ts +2 -2
- package/dist/hooks.js +7 -6
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +21 -16
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +3 -3
- package/dist/providers.js +4 -3
- package/dist/rbac/index.d.ts +67 -27
- package/dist/rbac/index.js +15 -8
- package/dist/styles/index.js +1 -1
- package/dist/theming/runtime.js +1 -1
- package/dist/types.js +1 -1
- package/dist/{usePublicRouteParams-1oMokgLF.d.ts → usePublicRouteParams-i3qtoBgg.d.ts} +7 -16
- package/dist/utils.js +5 -7
- package/dist/utils.js.map +1 -1
- package/docs/api/README.md +14 -16
- package/docs/api/modules.md +3796 -2513
- package/docs/components/context-selector.md +126 -0
- package/docs/migration/RBAC_SCOPE_MIGRATION.md +385 -0
- package/docs/pace-mint-fix-auto-selection.md +218 -0
- package/docs/pace-mint-rbac-setup.md +391 -0
- package/docs/rbac/secure-client-protection.md +330 -0
- package/package.json +10 -5
- package/scripts/audit/core/checks/compliance.cjs +72 -0
- package/scripts/audit/core/checks/dependencies.cjs +568 -28
- package/scripts/audit/core/checks/documentation.cjs +68 -3
- package/scripts/audit/core/checks/environment.cjs +2 -14
- package/scripts/audit/core/checks/error-handling.cjs +47 -6
- package/src/components/ContextSelector/ContextSelector.tsx +384 -0
- package/src/components/ContextSelector/index.ts +3 -0
- package/src/components/DataTable/components/RowComponent.tsx +19 -19
- package/src/components/DataTable/components/UnifiedTableBody.tsx +2 -2
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +8 -6
- package/src/components/Dialog/Dialog.tsx +29 -1
- package/src/components/FileDisplay/FileDisplay.tsx +42 -10
- package/src/components/Header/Header.test.tsx +43 -73
- package/src/components/Header/Header.tsx +44 -45
- package/src/components/PaceAppLayout/PaceAppLayout.integration.test.tsx +10 -19
- package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +2 -2
- package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +5 -5
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +9 -9
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +157 -36
- package/src/components/PaceAppLayout/README.md +14 -17
- package/src/components/PaceAppLayout/test-setup.tsx +2 -2
- package/src/components/index.ts +5 -5
- package/src/eslint-rules/pace-core-compliance.cjs +106 -0
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +4 -98
- package/src/hooks/useAppConfig.ts +15 -30
- package/src/hooks/useFileDisplay.ts +77 -50
- package/src/index.ts +4 -5
- package/src/providers/services/AuthServiceProvider.tsx +17 -7
- package/src/providers/services/EventServiceProvider.tsx +33 -5
- package/src/providers/services/UnifiedAuthProvider.tsx +90 -134
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +1 -1
- package/src/rbac/adapters.tsx +2 -2
- package/src/rbac/api.test.ts +59 -51
- package/src/rbac/api.ts +178 -132
- package/src/rbac/components/PagePermissionGuard.tsx +38 -10
- package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +32 -21
- package/src/rbac/hooks/permissions/useAccessLevel.ts +1 -1
- package/src/rbac/hooks/permissions/useCan.ts +41 -11
- package/src/rbac/hooks/permissions/useHasAllPermissions.ts +1 -1
- package/src/rbac/hooks/permissions/useHasAnyPermission.ts +1 -1
- package/src/rbac/hooks/permissions/useMultiplePermissions.ts +1 -1
- package/src/rbac/hooks/useCan.test.ts +0 -9
- package/src/rbac/hooks/useRBAC.test.ts +1 -5
- package/src/rbac/hooks/useRBAC.ts +36 -37
- package/src/rbac/hooks/useResolvedScope.test.ts +120 -35
- package/src/rbac/hooks/useResolvedScope.ts +35 -40
- package/src/rbac/hooks/useSecureSupabase.ts +7 -7
- package/src/rbac/index.ts +7 -0
- package/src/rbac/secureClient.test.ts +22 -18
- package/src/rbac/secureClient.ts +103 -16
- package/src/rbac/security.ts +0 -17
- package/src/rbac/types.ts +1 -0
- package/src/rbac/utils/__tests__/contextValidator.test.ts +64 -86
- package/src/rbac/utils/clientSecurity.ts +93 -0
- package/src/rbac/utils/contextValidator.ts +77 -168
- package/src/services/AuthService.ts +39 -7
- package/src/services/EventService.ts +285 -56
- package/src/services/OrganisationService.ts +81 -14
- package/src/services/__tests__/EventService.test.ts +1 -2
- package/src/services/base/BaseService.ts +3 -0
- package/src/utils/dynamic/dynamicUtils.ts +7 -4
- package/dist/chunk-24UVZUZG.js.map +0 -1
- package/dist/chunk-3XC4CPTD.js.map +0 -1
- package/dist/chunk-6J4GEEJR.js.map +0 -1
- package/dist/chunk-7D4SUZUM.js +0 -38
- package/dist/chunk-EHMR7VYL.js.map +0 -1
- package/dist/chunk-NECFR5MM.js.map +0 -1
- package/dist/chunk-SFZUDBL5.js.map +0 -1
- package/dist/chunk-XWQCNGTQ.js.map +0 -1
- package/docs/api/classes/ColumnFactory.md +0 -243
- package/docs/api/classes/InvalidScopeError.md +0 -73
- package/docs/api/classes/Logger.md +0 -178
- package/docs/api/classes/MissingUserContextError.md +0 -66
- package/docs/api/classes/OrganisationContextRequiredError.md +0 -66
- package/docs/api/classes/PermissionDeniedError.md +0 -73
- package/docs/api/classes/RBACAuditManager.md +0 -297
- package/docs/api/classes/RBACCache.md +0 -322
- package/docs/api/classes/RBACEngine.md +0 -171
- package/docs/api/classes/RBACError.md +0 -76
- package/docs/api/classes/RBACNotInitializedError.md +0 -66
- package/docs/api/classes/SecureSupabaseClient.md +0 -163
- package/docs/api/classes/StorageUtils.md +0 -328
- package/docs/api/enums/FileCategory.md +0 -184
- package/docs/api/enums/LogLevel.md +0 -54
- package/docs/api/enums/RBACErrorCode.md +0 -228
- package/docs/api/enums/RPCFunction.md +0 -118
- package/docs/api/interfaces/AddressFieldProps.md +0 -241
- package/docs/api/interfaces/AddressFieldRef.md +0 -94
- package/docs/api/interfaces/AggregateConfig.md +0 -43
- package/docs/api/interfaces/AutocompleteOptions.md +0 -75
- package/docs/api/interfaces/AvatarProps.md +0 -128
- package/docs/api/interfaces/BadgeProps.md +0 -34
- package/docs/api/interfaces/ButtonProps.md +0 -56
- package/docs/api/interfaces/CalendarProps.md +0 -73
- package/docs/api/interfaces/CardProps.md +0 -69
- package/docs/api/interfaces/ColorPalette.md +0 -7
- package/docs/api/interfaces/ColorShade.md +0 -66
- package/docs/api/interfaces/ComplianceResult.md +0 -30
- package/docs/api/interfaces/DataAccessRecord.md +0 -96
- package/docs/api/interfaces/DataRecord.md +0 -11
- package/docs/api/interfaces/DataTableAction.md +0 -252
- package/docs/api/interfaces/DataTableColumn.md +0 -504
- package/docs/api/interfaces/DataTableProps.md +0 -625
- package/docs/api/interfaces/DataTableToolbarButton.md +0 -96
- package/docs/api/interfaces/DatabaseComplianceResult.md +0 -85
- package/docs/api/interfaces/DatabaseIssue.md +0 -41
- package/docs/api/interfaces/EmptyStateConfig.md +0 -61
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +0 -235
- package/docs/api/interfaces/ErrorBoundaryProps.md +0 -147
- package/docs/api/interfaces/ErrorBoundaryProviderProps.md +0 -36
- package/docs/api/interfaces/ErrorBoundaryState.md +0 -75
- package/docs/api/interfaces/EventAppRoleData.md +0 -71
- package/docs/api/interfaces/ExportColumn.md +0 -90
- package/docs/api/interfaces/ExportOptions.md +0 -126
- package/docs/api/interfaces/FileDisplayProps.md +0 -249
- package/docs/api/interfaces/FileMetadata.md +0 -129
- package/docs/api/interfaces/FileReference.md +0 -118
- package/docs/api/interfaces/FileSizeLimits.md +0 -7
- package/docs/api/interfaces/FileUploadOptions.md +0 -139
- package/docs/api/interfaces/FileUploadProps.md +0 -296
- package/docs/api/interfaces/FooterProps.md +0 -107
- package/docs/api/interfaces/FormFieldProps.md +0 -166
- package/docs/api/interfaces/FormProps.md +0 -113
- package/docs/api/interfaces/GrantEventAppRoleParams.md +0 -122
- package/docs/api/interfaces/InactivityWarningModalProps.md +0 -115
- package/docs/api/interfaces/InputProps.md +0 -56
- package/docs/api/interfaces/LabelProps.md +0 -107
- package/docs/api/interfaces/LoggerConfig.md +0 -62
- package/docs/api/interfaces/LoginFormProps.md +0 -187
- package/docs/api/interfaces/NavigationAccessRecord.md +0 -107
- package/docs/api/interfaces/NavigationContextType.md +0 -164
- package/docs/api/interfaces/NavigationGuardProps.md +0 -139
- package/docs/api/interfaces/NavigationItem.md +0 -120
- package/docs/api/interfaces/NavigationMenuProps.md +0 -221
- package/docs/api/interfaces/NavigationProviderProps.md +0 -117
- package/docs/api/interfaces/Organisation.md +0 -140
- package/docs/api/interfaces/OrganisationContextType.md +0 -388
- package/docs/api/interfaces/OrganisationMembership.md +0 -140
- package/docs/api/interfaces/OrganisationProviderProps.md +0 -76
- package/docs/api/interfaces/OrganisationSecurityError.md +0 -62
- package/docs/api/interfaces/PaceAppLayoutProps.md +0 -409
- package/docs/api/interfaces/PaceLoginPageProps.md +0 -49
- package/docs/api/interfaces/PageAccessRecord.md +0 -85
- package/docs/api/interfaces/PagePermissionContextType.md +0 -140
- package/docs/api/interfaces/PagePermissionGuardProps.md +0 -153
- package/docs/api/interfaces/PagePermissionProviderProps.md +0 -119
- package/docs/api/interfaces/PaletteData.md +0 -41
- package/docs/api/interfaces/ParsedAddress.md +0 -120
- package/docs/api/interfaces/PermissionEnforcerProps.md +0 -153
- package/docs/api/interfaces/ProgressProps.md +0 -42
- package/docs/api/interfaces/ProtectedRouteProps.md +0 -78
- package/docs/api/interfaces/PublicPageFooterProps.md +0 -112
- package/docs/api/interfaces/PublicPageHeaderProps.md +0 -125
- package/docs/api/interfaces/PublicPageLayoutProps.md +0 -185
- package/docs/api/interfaces/QuickFix.md +0 -52
- package/docs/api/interfaces/RBACAccessValidateParams.md +0 -52
- package/docs/api/interfaces/RBACAccessValidateResult.md +0 -41
- package/docs/api/interfaces/RBACAuditLogParams.md +0 -85
- package/docs/api/interfaces/RBACAuditLogResult.md +0 -52
- package/docs/api/interfaces/RBACConfig.md +0 -133
- package/docs/api/interfaces/RBACContext.md +0 -52
- package/docs/api/interfaces/RBACLogger.md +0 -112
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +0 -74
- package/docs/api/interfaces/RBACPerformanceMetrics.md +0 -138
- package/docs/api/interfaces/RBACPermissionCheckParams.md +0 -74
- package/docs/api/interfaces/RBACPermissionCheckResult.md +0 -52
- package/docs/api/interfaces/RBACPermissionsGetParams.md +0 -63
- package/docs/api/interfaces/RBACPermissionsGetResult.md +0 -63
- package/docs/api/interfaces/RBACResult.md +0 -58
- package/docs/api/interfaces/RBACRoleGrantParams.md +0 -63
- package/docs/api/interfaces/RBACRoleGrantResult.md +0 -52
- package/docs/api/interfaces/RBACRoleRevokeParams.md +0 -63
- package/docs/api/interfaces/RBACRoleRevokeResult.md +0 -52
- package/docs/api/interfaces/RBACRoleValidateParams.md +0 -52
- package/docs/api/interfaces/RBACRoleValidateResult.md +0 -63
- package/docs/api/interfaces/RBACRolesListParams.md +0 -52
- package/docs/api/interfaces/RBACRolesListResult.md +0 -74
- package/docs/api/interfaces/RBACSessionTrackParams.md +0 -74
- package/docs/api/interfaces/RBACSessionTrackResult.md +0 -52
- package/docs/api/interfaces/ResourcePermissions.md +0 -155
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +0 -100
- package/docs/api/interfaces/RoleBasedRouterContextType.md +0 -151
- package/docs/api/interfaces/RoleBasedRouterProps.md +0 -156
- package/docs/api/interfaces/RoleManagementResult.md +0 -52
- package/docs/api/interfaces/RouteAccessRecord.md +0 -107
- package/docs/api/interfaces/RouteConfig.md +0 -134
- package/docs/api/interfaces/RuntimeComplianceResult.md +0 -55
- package/docs/api/interfaces/SecureDataContextType.md +0 -168
- package/docs/api/interfaces/SecureDataProviderProps.md +0 -132
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +0 -34
- package/docs/api/interfaces/SetupIssue.md +0 -41
- package/docs/api/interfaces/StorageConfig.md +0 -41
- package/docs/api/interfaces/StorageFileInfo.md +0 -74
- package/docs/api/interfaces/StorageFileMetadata.md +0 -151
- package/docs/api/interfaces/StorageListOptions.md +0 -99
- package/docs/api/interfaces/StorageListResult.md +0 -41
- package/docs/api/interfaces/StorageUploadOptions.md +0 -101
- package/docs/api/interfaces/StorageUploadResult.md +0 -63
- package/docs/api/interfaces/StorageUrlOptions.md +0 -60
- package/docs/api/interfaces/StyleImport.md +0 -19
- package/docs/api/interfaces/SwitchProps.md +0 -34
- package/docs/api/interfaces/TabsContentProps.md +0 -9
- package/docs/api/interfaces/TabsListProps.md +0 -9
- package/docs/api/interfaces/TabsProps.md +0 -9
- package/docs/api/interfaces/TabsTriggerProps.md +0 -50
- package/docs/api/interfaces/TextareaProps.md +0 -53
- package/docs/api/interfaces/ToastActionElement.md +0 -12
- package/docs/api/interfaces/ToastProps.md +0 -9
- package/docs/api/interfaces/UnifiedAuthContextType.md +0 -823
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +0 -173
- package/docs/api/interfaces/UseFormDialogOptions.md +0 -62
- package/docs/api/interfaces/UseFormDialogReturn.md +0 -117
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +0 -138
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +0 -123
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +0 -87
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +0 -84
- package/docs/api/interfaces/UsePublicEventOptions.md +0 -34
- package/docs/api/interfaces/UsePublicEventReturn.md +0 -71
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +0 -47
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +0 -123
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +0 -97
- package/docs/api/interfaces/UseResolvedScopeOptions.md +0 -47
- package/docs/api/interfaces/UseResolvedScopeReturn.md +0 -47
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +0 -34
- package/docs/api/interfaces/UserEventAccess.md +0 -121
- package/docs/api/interfaces/UserMenuProps.md +0 -88
- package/docs/api/interfaces/UserProfile.md +0 -63
- package/src/components/EventSelector/EventSelector.test.tsx +0 -720
- package/src/components/EventSelector/EventSelector.tsx +0 -423
- package/src/components/EventSelector/index.ts +0 -3
- package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +0 -784
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +0 -327
- package/src/components/OrganisationSelector/index.ts +0 -9
- /package/dist/{DataTable-TPTKCX4D.js.map → DataTable-E7YQZD7D.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-CH6Z342H.js.map → UnifiedAuthProvider-QPXO24B4.js.map} +0 -0
- /package/dist/{api-MVVQZLJI.js.map → api-6LVZTHDS.js.map} +0 -0
- /package/dist/{audit-B5P6FFIR.js.map → audit-V53FV5AG.js.map} +0 -0
- /package/dist/{chunk-2UOI2FG5.js.map → chunk-5EC5MEWX.js.map} +0 -0
- /package/dist/{chunk-7D4SUZUM.js.map → chunk-DGUM43GV.js.map} +0 -0
- /package/dist/{chunk-F2IMUDXZ.js.map → chunk-M7MPQISP.js.map} +0 -0
package/dist/rbac/index.d.ts
CHANGED
|
@@ -7,25 +7,6 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
7
7
|
import React__default, { ReactNode } from 'react';
|
|
8
8
|
import '../core-CUElvH_C.js';
|
|
9
9
|
|
|
10
|
-
/**
|
|
11
|
-
* Context Validator for RBAC
|
|
12
|
-
* @package @jmruthers/pace-core
|
|
13
|
-
* @module RBAC/ContextValidator
|
|
14
|
-
* @since 1.0.0
|
|
15
|
-
*
|
|
16
|
-
* Centralized validation for RBAC context requirements based on app configuration.
|
|
17
|
-
* Enforces app-specific context rules with single primary context:
|
|
18
|
-
* - requires_event = TRUE: Event is PRIMARY context, org derived from event (org not required in input)
|
|
19
|
-
* - requires_event = FALSE: Organisation is PRIMARY context, event optional
|
|
20
|
-
* - PORTAL/ADMIN apps: Both contexts optional (allows users to view/edit own profiles, super admin access)
|
|
21
|
-
*
|
|
22
|
-
* Key principle: Only one primary context is required based on app config. The other is derived or optional.
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
interface AppConfig {
|
|
26
|
-
requires_event: boolean;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
10
|
/**
|
|
30
11
|
* RBAC Security Enhancements
|
|
31
12
|
* @package @jmruthers/pace-core
|
|
@@ -137,6 +118,7 @@ declare class SecureSupabaseClient {
|
|
|
137
118
|
private appId?;
|
|
138
119
|
private isSuperAdmin;
|
|
139
120
|
private usesExistingClient;
|
|
121
|
+
private static rpcSignatureCache;
|
|
140
122
|
/**
|
|
141
123
|
* RPC functions that are safe to call without organisation context.
|
|
142
124
|
*
|
|
@@ -236,6 +218,18 @@ declare class SecureSupabaseClient {
|
|
|
236
218
|
* @internal
|
|
237
219
|
*/
|
|
238
220
|
getClient(): SupabaseClient<Database>;
|
|
221
|
+
/**
|
|
222
|
+
* Get the set of parameter names that an RPC function accepts.
|
|
223
|
+
* Uses a static whitelist of RPCs that we know accept context parameters.
|
|
224
|
+
*
|
|
225
|
+
* This is an opt-in approach: by default, we don't inject context unless
|
|
226
|
+
* the function is explicitly whitelisted. This prevents PGRST202 errors from
|
|
227
|
+
* injecting unexpected parameters.
|
|
228
|
+
*
|
|
229
|
+
* @param fn - The RPC function name
|
|
230
|
+
* @returns Set of parameter names the function accepts
|
|
231
|
+
*/
|
|
232
|
+
private getRpcAcceptedParams;
|
|
239
233
|
}
|
|
240
234
|
/**
|
|
241
235
|
* Create a secure Supabase client with organisation context
|
|
@@ -282,6 +276,53 @@ declare function createSecureClient(supabaseUrl: string, supabaseKey: string, or
|
|
|
282
276
|
*/
|
|
283
277
|
declare function fromSupabaseClient(client: SupabaseClient<Database>, organisationId: UUID | null, eventId?: string, appId?: UUID, isSuperAdmin?: boolean): SecureSupabaseClient;
|
|
284
278
|
|
|
279
|
+
/**
|
|
280
|
+
* Client Security Detection Utilities
|
|
281
|
+
* @package @jmruthers/pace-core
|
|
282
|
+
* @module RBAC/Utils/ClientSecurity
|
|
283
|
+
* @since 1.0.0
|
|
284
|
+
*
|
|
285
|
+
* Utilities to detect and warn about insecure Supabase client usage.
|
|
286
|
+
*/
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Symbol to mark secure clients
|
|
290
|
+
* This is attached to clients created by SecureSupabaseClient
|
|
291
|
+
*/
|
|
292
|
+
declare const SECURE_CLIENT_SYMBOL: unique symbol;
|
|
293
|
+
/**
|
|
294
|
+
* Check if a Supabase client is a secure client (created via useSecureSupabase or createSecureClient)
|
|
295
|
+
*
|
|
296
|
+
* @param client - The Supabase client to check
|
|
297
|
+
* @returns true if the client is secure, false otherwise
|
|
298
|
+
*
|
|
299
|
+
* @example
|
|
300
|
+
* ```tsx
|
|
301
|
+
* import { isSecureClient } from '@jmruthers/pace-core/rbac/utils/clientSecurity';
|
|
302
|
+
*
|
|
303
|
+
* const supabase = useSecureSupabase();
|
|
304
|
+
* if (isSecureClient(supabase)) {
|
|
305
|
+
* // Client is secure, safe to use
|
|
306
|
+
* }
|
|
307
|
+
* ```
|
|
308
|
+
*/
|
|
309
|
+
declare function isSecureClient(client: SupabaseClient<Database> | null | undefined): boolean;
|
|
310
|
+
/**
|
|
311
|
+
* Warn about insecure client usage in development
|
|
312
|
+
*
|
|
313
|
+
* @param client - The client being used
|
|
314
|
+
* @param context - Context about where the client is being used (for better error messages)
|
|
315
|
+
*
|
|
316
|
+
* @example
|
|
317
|
+
* ```tsx
|
|
318
|
+
* import { warnIfInsecureClient } from '@jmruthers/pace-core/rbac/utils/clientSecurity';
|
|
319
|
+
*
|
|
320
|
+
* const supabase = createClient(...); // Wrong!
|
|
321
|
+
* warnIfInsecureClient(supabase, 'MyComponent');
|
|
322
|
+
* ```
|
|
323
|
+
*/
|
|
324
|
+
declare function warnIfInsecureClient(client: SupabaseClient<Database> | null | undefined, context?: string): void;
|
|
325
|
+
|
|
285
326
|
/**
|
|
286
327
|
* RBAC Cache Implementation
|
|
287
328
|
* @package @jmruthers/pace-core
|
|
@@ -2233,7 +2274,7 @@ declare function setupRBAC(supabase: SupabaseClient<Database>, config?: Partial<
|
|
|
2233
2274
|
declare function getAccessLevel(input: {
|
|
2234
2275
|
userId: UUID;
|
|
2235
2276
|
scope: Scope;
|
|
2236
|
-
},
|
|
2277
|
+
}, appName?: string): Promise<AccessLevel>;
|
|
2237
2278
|
/**
|
|
2238
2279
|
* Get user's permission map for a scope
|
|
2239
2280
|
*
|
|
@@ -2257,7 +2298,7 @@ declare function getAccessLevel(input: {
|
|
|
2257
2298
|
declare function getPermissionMap(input: {
|
|
2258
2299
|
userId: UUID;
|
|
2259
2300
|
scope: Scope;
|
|
2260
|
-
},
|
|
2301
|
+
}, appName?: string): Promise<PermissionMap>;
|
|
2261
2302
|
declare function resolveAppContext(input: {
|
|
2262
2303
|
userId: UUID;
|
|
2263
2304
|
appName: string;
|
|
@@ -2265,7 +2306,7 @@ declare function resolveAppContext(input: {
|
|
|
2265
2306
|
declare function getRoleContext(input: {
|
|
2266
2307
|
userId: UUID;
|
|
2267
2308
|
scope: Scope;
|
|
2268
|
-
},
|
|
2309
|
+
}, appName?: string): Promise<RBACRoleContext>;
|
|
2269
2310
|
/**
|
|
2270
2311
|
* Check if user has a specific permission
|
|
2271
2312
|
*
|
|
@@ -2284,7 +2325,7 @@ declare function getRoleContext(input: {
|
|
|
2284
2325
|
* });
|
|
2285
2326
|
* ```
|
|
2286
2327
|
*/
|
|
2287
|
-
declare function isPermitted(input: PermissionCheck,
|
|
2328
|
+
declare function isPermitted(input: PermissionCheck, appName?: string,
|
|
2288
2329
|
/**
|
|
2289
2330
|
* Pre-computed super admin status to avoid duplicate checks.
|
|
2290
2331
|
* Pass null if not checked yet (will check), true if already checked and is super admin,
|
|
@@ -2299,11 +2340,10 @@ precomputedSuperAdmin?: boolean | null): Promise<boolean>;
|
|
|
2299
2340
|
* and checks cache before making new requests. Uses session cache for page-level checks.
|
|
2300
2341
|
*
|
|
2301
2342
|
* @param input - Permission check input
|
|
2302
|
-
* @param
|
|
2303
|
-
* @param appName - Optional app name
|
|
2343
|
+
* @param appName - Optional app name (for PORTAL/ADMIN special case)
|
|
2304
2344
|
* @returns Promise resolving to permission result
|
|
2305
2345
|
*/
|
|
2306
|
-
declare function isPermittedCached(input: PermissionCheck,
|
|
2346
|
+
declare function isPermittedCached(input: PermissionCheck, appName?: string): Promise<boolean>;
|
|
2307
2347
|
/**
|
|
2308
2348
|
* Check if a user has a specific permission (alias for isPermitted)
|
|
2309
2349
|
*
|
|
@@ -2640,4 +2680,4 @@ declare function getDirectSupabaseAuthFixes(): QuickFix;
|
|
|
2640
2680
|
*/
|
|
2641
2681
|
declare function getQuickFixes(issueType: string, details?: Record<string, any>): QuickFix[];
|
|
2642
2682
|
|
|
2643
|
-
export { ALL_PERMISSIONS, AccessLevel, AccessLevelGuard, type AllPermissions, CACHE_PATTERNS, type ComplianceResult, type DataAccessRecord, type DatabaseComplianceResult, type DatabaseIssue, EVENT_APP_PERMISSIONS, EnhancedNavigationMenu, type EnhancedNavigationMenuProps, type EventAppRoleData, GLOBAL_PERMISSIONS, type GrantEventAppRoleParams, type LogLevel, type NavigationAccessRecord, type NavigationContextType, NavigationGuard, type NavigationGuardProps, type NavigationItem, NavigationProvider, type NavigationProviderProps, ORGANISATION_PERMISSIONS, PAGE_PERMISSIONS, type PageAccessRecord, type PagePermissionContextType, PagePermissionGuard, type PagePermissionGuardProps, PagePermissionProvider, type PagePermissionProviderProps, Permission, PermissionCheck, PermissionEnforcer, type PermissionEnforcerProps, PermissionGuard, PermissionMap, type QuickFix, RBACAuditManager, RBACCache, type RBACConfig, RBACEngine, type RBACLogger, type RBACPerformanceMetrics, type ResourcePermissions, type RevokeEventAppRoleParams, RoleBasedRouter, type RoleBasedRouterContextType, type RoleBasedRouterProps, type RoleManagementResult, type RouteAccessRecord, type RouteConfig, type RuntimeComplianceResult, Scope, type SecureDataContextType, SecureDataProvider, type SecureDataProviderProps, SecureSupabaseClient, type SetupIssue, UUID, type UseResolvedScopeOptions, type UseResolvedScopeReturn, type UseResourcePermissionsOptions, checkRuntimeCompliance, clearInFlightRequests, createAuditManager, createRBACConfig, createRBACEngine, createRBACExpressMiddleware, createRBACMiddleware, createSecureClient, disablePerformanceMonitoring, emitAuditEvent, enablePerformanceMonitoring, fromSupabaseClient, getAccessLevel, getCustomAuthCodeFixes, getDirectSupabaseAuthFixes, getDuplicateConfigFixes, getGlobalAuditManager, getInFlightRequestCount, getPerformanceMetrics, getPerformanceSummary, getPermissionMap, getQuickFixes, getRBACConfig, getRBACLogger, getRoleContext, getSetupIssues, getUnprotectedPageFixes, hasAllPermissions, hasAnyPermission, hasAnyPermissionCached, hasPermission, hasPermissionCached, isDebugMode, isDevelopmentMode, isPerformanceMonitoringEnabled, isPermitted, isPermittedCached, isRBACInitialized, isValidPermission, rbacCache, recordAuditEvent, recordPermissionCheck, resetPerformanceMetrics, resolveAppContext, setGlobalAuditManager, setupRBAC, useAccessLevel, useCachedPermissions, useCan, useHasAllPermissions, useHasAnyPermission, useMultiplePermissions, useNavigationPermissions, usePagePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleBasedRouter, useRoleManagement, useSecureData, useSecureSupabase, validateAndWarn, validateDatabaseConfiguration, validateRBACSetup, withAccessLevelGuard, withPermissionGuard, withRoleGuard };
|
|
2683
|
+
export { ALL_PERMISSIONS, AccessLevel, AccessLevelGuard, type AllPermissions, CACHE_PATTERNS, type ComplianceResult, type DataAccessRecord, type DatabaseComplianceResult, type DatabaseIssue, EVENT_APP_PERMISSIONS, EnhancedNavigationMenu, type EnhancedNavigationMenuProps, type EventAppRoleData, GLOBAL_PERMISSIONS, type GrantEventAppRoleParams, type LogLevel, type NavigationAccessRecord, type NavigationContextType, NavigationGuard, type NavigationGuardProps, type NavigationItem, NavigationProvider, type NavigationProviderProps, ORGANISATION_PERMISSIONS, PAGE_PERMISSIONS, type PageAccessRecord, type PagePermissionContextType, PagePermissionGuard, type PagePermissionGuardProps, PagePermissionProvider, type PagePermissionProviderProps, Permission, PermissionCheck, PermissionEnforcer, type PermissionEnforcerProps, PermissionGuard, PermissionMap, type QuickFix, RBACAuditManager, RBACCache, type RBACConfig, RBACEngine, type RBACLogger, type RBACPerformanceMetrics, type ResourcePermissions, type RevokeEventAppRoleParams, RoleBasedRouter, type RoleBasedRouterContextType, type RoleBasedRouterProps, type RoleManagementResult, type RouteAccessRecord, type RouteConfig, type RuntimeComplianceResult, SECURE_CLIENT_SYMBOL, Scope, type SecureDataContextType, SecureDataProvider, type SecureDataProviderProps, SecureSupabaseClient, type SetupIssue, UUID, type UseResolvedScopeOptions, type UseResolvedScopeReturn, type UseResourcePermissionsOptions, checkRuntimeCompliance, clearInFlightRequests, createAuditManager, createRBACConfig, createRBACEngine, createRBACExpressMiddleware, createRBACMiddleware, createSecureClient, disablePerformanceMonitoring, emitAuditEvent, enablePerformanceMonitoring, fromSupabaseClient, getAccessLevel, getCustomAuthCodeFixes, getDirectSupabaseAuthFixes, getDuplicateConfigFixes, getGlobalAuditManager, getInFlightRequestCount, getPerformanceMetrics, getPerformanceSummary, getPermissionMap, getQuickFixes, getRBACConfig, getRBACLogger, getRoleContext, getSetupIssues, getUnprotectedPageFixes, hasAllPermissions, hasAnyPermission, hasAnyPermissionCached, hasPermission, hasPermissionCached, isDebugMode, isDevelopmentMode, isPerformanceMonitoringEnabled, isPermitted, isPermittedCached, isRBACInitialized, isSecureClient, isValidPermission, rbacCache, recordAuditEvent, recordPermissionCheck, resetPerformanceMetrics, resolveAppContext, setGlobalAuditManager, setupRBAC, useAccessLevel, useCachedPermissions, useCan, useHasAllPermissions, useHasAnyPermission, useMultiplePermissions, useNavigationPermissions, usePagePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleBasedRouter, useRoleManagement, useSecureData, useSecureSupabase, validateAndWarn, validateDatabaseConfiguration, validateRBACSetup, warnIfInsecureClient, withAccessLevelGuard, withPermissionGuard, withRoleGuard };
|
package/dist/rbac/index.js
CHANGED
|
@@ -39,11 +39,13 @@ import {
|
|
|
39
39
|
withAccessLevelGuard,
|
|
40
40
|
withPermissionGuard,
|
|
41
41
|
withRoleGuard
|
|
42
|
-
} from "../chunk-
|
|
42
|
+
} from "../chunk-ATKZM7RX.js";
|
|
43
43
|
import {
|
|
44
|
+
SECURE_CLIENT_SYMBOL,
|
|
44
45
|
SecureSupabaseClient,
|
|
45
46
|
createSecureClient,
|
|
46
47
|
fromSupabaseClient,
|
|
48
|
+
isSecureClient,
|
|
47
49
|
useAccessLevel,
|
|
48
50
|
useCachedPermissions,
|
|
49
51
|
useCan,
|
|
@@ -55,11 +57,12 @@ import {
|
|
|
55
57
|
useResolvedScope,
|
|
56
58
|
useResourcePermissions,
|
|
57
59
|
useRoleManagement,
|
|
58
|
-
useSecureSupabase
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
useSecureSupabase,
|
|
61
|
+
warnIfInsecureClient
|
|
62
|
+
} from "../chunk-NN6WWZ5U.js";
|
|
63
|
+
import "../chunk-OEWDTMG7.js";
|
|
61
64
|
import "../chunk-KQCRWDSA.js";
|
|
62
|
-
import "../chunk-
|
|
65
|
+
import "../chunk-AVMLPIM7.js";
|
|
63
66
|
import {
|
|
64
67
|
CACHE_PATTERNS,
|
|
65
68
|
RBACCache,
|
|
@@ -91,7 +94,7 @@ import {
|
|
|
91
94
|
resetPerformanceMetrics,
|
|
92
95
|
resolveAppContext,
|
|
93
96
|
setupRBAC
|
|
94
|
-
} from "../chunk-
|
|
97
|
+
} from "../chunk-3LPHPB62.js";
|
|
95
98
|
import {
|
|
96
99
|
RBACAuditManager,
|
|
97
100
|
createAuditManager,
|
|
@@ -99,12 +102,13 @@ import {
|
|
|
99
102
|
getGlobalAuditManager,
|
|
100
103
|
setGlobalAuditManager
|
|
101
104
|
} from "../chunk-63FOKYGO.js";
|
|
105
|
+
import "../chunk-36LVWXB2.js";
|
|
102
106
|
import "../chunk-QXHPKYJV.js";
|
|
103
|
-
import "../chunk-
|
|
107
|
+
import "../chunk-M7MPQISP.js";
|
|
104
108
|
import "../chunk-FMUCXFII.js";
|
|
105
109
|
import "../chunk-VBXEHIUJ.js";
|
|
106
110
|
import "../chunk-PWLANIRT.js";
|
|
107
|
-
import "../chunk-
|
|
111
|
+
import "../chunk-DGUM43GV.js";
|
|
108
112
|
export {
|
|
109
113
|
ALL_PERMISSIONS,
|
|
110
114
|
AccessLevelGuard,
|
|
@@ -126,6 +130,7 @@ export {
|
|
|
126
130
|
RBACErrorCode,
|
|
127
131
|
RPCFunction,
|
|
128
132
|
RoleBasedRouter,
|
|
133
|
+
SECURE_CLIENT_SYMBOL,
|
|
129
134
|
SecureDataProvider,
|
|
130
135
|
SecureSupabaseClient,
|
|
131
136
|
checkRuntimeCompliance,
|
|
@@ -166,6 +171,7 @@ export {
|
|
|
166
171
|
isPermitted,
|
|
167
172
|
isPermittedCached,
|
|
168
173
|
isRBACInitialized,
|
|
174
|
+
isSecureClient,
|
|
169
175
|
isValidPermission,
|
|
170
176
|
rbacCache,
|
|
171
177
|
recordAuditEvent,
|
|
@@ -193,6 +199,7 @@ export {
|
|
|
193
199
|
validateAndWarn,
|
|
194
200
|
validateDatabaseConfiguration,
|
|
195
201
|
validateRBACSetup,
|
|
202
|
+
warnIfInsecureClient,
|
|
196
203
|
withAccessLevelGuard,
|
|
197
204
|
withPermissionGuard,
|
|
198
205
|
withRoleGuard
|
package/dist/styles/index.js
CHANGED
package/dist/theming/runtime.js
CHANGED
package/dist/types.js
CHANGED
|
@@ -232,34 +232,25 @@ declare const useOrganisationSecurity: () => OrganisationSecurityHook;
|
|
|
232
232
|
* @module Hooks/useAppConfig
|
|
233
233
|
* @since 0.4.0
|
|
234
234
|
*
|
|
235
|
-
* Hook for accessing app
|
|
236
|
-
*
|
|
235
|
+
* Hook for accessing app name and loading state.
|
|
236
|
+
*
|
|
237
|
+
* NOTE: Scope configuration (requires_event) is now page-level only (rbac_app_pages.scope_type).
|
|
238
|
+
* Use getPageScopeType() to determine if a specific page requires event or organisation context.
|
|
237
239
|
*
|
|
238
240
|
* @example
|
|
239
241
|
* ```tsx
|
|
240
242
|
* function MyComponent() {
|
|
241
|
-
* const {
|
|
243
|
+
* const { appName, isLoading } = useAppConfig();
|
|
242
244
|
*
|
|
243
245
|
* if (isLoading) return <div>Loading...</div>;
|
|
244
246
|
*
|
|
245
|
-
* return
|
|
246
|
-
* <div>
|
|
247
|
-
* {supportsDirectAccess && (
|
|
248
|
-
* <div>This app supports direct access!</div>
|
|
249
|
-
* )}
|
|
250
|
-
* {requiresEvent && (
|
|
251
|
-
* <EventSelector />
|
|
252
|
-
* )}
|
|
253
|
-
* </div>
|
|
254
|
-
* );
|
|
247
|
+
* return <div>App: {appName}</div>;
|
|
255
248
|
* }
|
|
256
249
|
* ```
|
|
257
250
|
*/
|
|
258
251
|
interface UseAppConfigReturn {
|
|
259
|
-
supportsDirectAccess: boolean;
|
|
260
|
-
requiresEvent: boolean;
|
|
261
|
-
isLoading: boolean;
|
|
262
252
|
appName: string;
|
|
253
|
+
isLoading: boolean;
|
|
263
254
|
}
|
|
264
255
|
/**
|
|
265
256
|
* Hook to access app configuration
|
package/dist/utils.js
CHANGED
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
getCurrentAppName,
|
|
53
53
|
getCurrentAppNameWithFallback,
|
|
54
54
|
setRBACAppName
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-M7MPQISP.js";
|
|
56
56
|
import {
|
|
57
57
|
useComponentPerformance
|
|
58
58
|
} from "./chunk-E66EQZE6.js";
|
|
@@ -97,7 +97,7 @@ import {
|
|
|
97
97
|
createLogger,
|
|
98
98
|
logger
|
|
99
99
|
} from "./chunk-PWLANIRT.js";
|
|
100
|
-
import "./chunk-
|
|
100
|
+
import "./chunk-DGUM43GV.js";
|
|
101
101
|
|
|
102
102
|
// src/utils/core/debugLogger.ts
|
|
103
103
|
var DebugLogger = class {
|
|
@@ -881,10 +881,8 @@ function trackDynamicImport(moduleName) {
|
|
|
881
881
|
|
|
882
882
|
// src/utils/dynamic/dynamicUtils.ts
|
|
883
883
|
var loadLodash = async () => {
|
|
884
|
-
const
|
|
885
|
-
|
|
886
|
-
import("lodash.throttle")
|
|
887
|
-
]);
|
|
884
|
+
const debounceModule = await import("lodash.debounce");
|
|
885
|
+
const throttleModule = await import("lodash.throttle");
|
|
888
886
|
return {
|
|
889
887
|
debounce: debounceModule.default || debounceModule,
|
|
890
888
|
throttle: throttleModule.default || throttleModule
|
|
@@ -953,7 +951,7 @@ function createLazyComponent(importFn, componentName, options = {}) {
|
|
|
953
951
|
return WrappedComponent;
|
|
954
952
|
}
|
|
955
953
|
var LazyDataTable = createLazyComponent(
|
|
956
|
-
() => import("./DataTable-
|
|
954
|
+
() => import("./DataTable-E7YQZD7D.js").then((module) => ({ default: module.DataTable })),
|
|
957
955
|
"DataTable"
|
|
958
956
|
);
|
|
959
957
|
|