@jmruthers/pace-core 0.5.193 → 0.6.2
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 +62 -0
- package/README.md +7 -1
- package/cursor-rules/00-pace-core-compliance.mdc +299 -0
- package/cursor-rules/01-standards-compliance.mdc +244 -0
- package/cursor-rules/02-project-structure.mdc +200 -0
- package/cursor-rules/03-solid-principles.mdc +222 -0
- package/cursor-rules/04-testing-standards.mdc +268 -0
- package/cursor-rules/05-bug-reports-and-features.mdc +246 -0
- package/cursor-rules/06-code-quality.mdc +309 -0
- package/cursor-rules/07-tech-stack-compliance.mdc +214 -0
- package/cursor-rules/08-markup-quality.mdc +452 -0
- package/cursor-rules/CHANGELOG.md +119 -0
- package/cursor-rules/README.md +192 -0
- package/dist/{AuthService-DjnJHDtC.d.ts → AuthService-BPvc3Ka0.d.ts} +54 -0
- package/dist/{DataTable-Be6dH_dR.d.ts → DataTable-BMRU8a1j.d.ts} +34 -2
- package/dist/{DataTable-5FU7IESH.js → DataTable-TPTKCX4D.js} +10 -9
- package/dist/{PublicPageProvider-C0Sm_e5k.d.ts → PublicPageProvider-DC6kCaqf.d.ts} +385 -261
- package/dist/{UnifiedAuthProvider-RGJTDE2C.js → UnifiedAuthProvider-CH6Z342H.js} +3 -3
- package/dist/{UnifiedAuthProvider-185Ih4dj.d.ts → UnifiedAuthProvider-CVcTjx-d.d.ts} +29 -0
- package/dist/{api-N774RPUA.js → api-MVVQZLJI.js} +2 -2
- package/dist/{chunk-KNC55RTG.js → chunk-24UVZUZG.js} +90 -54
- package/dist/chunk-24UVZUZG.js.map +1 -0
- package/dist/{chunk-HWIIPPNI.js → chunk-2UOI2FG5.js} +20 -20
- package/dist/chunk-2UOI2FG5.js.map +1 -0
- package/dist/{chunk-E3SPN4VZ 5.js → chunk-3XC4CPTD.js} +4345 -3986
- package/dist/chunk-3XC4CPTD.js.map +1 -0
- package/dist/{chunk-7EQTDTTJ.js → chunk-6J4GEEJR.js} +172 -45
- package/dist/chunk-6J4GEEJR.js.map +1 -0
- package/dist/{chunk-6C4YBBJM 5.js → chunk-6SOIHG6Z.js} +1 -1
- package/dist/chunk-6SOIHG6Z.js.map +1 -0
- package/dist/{chunk-7FLMSG37.js → chunk-EHMR7VYL.js} +25 -25
- package/dist/chunk-EHMR7VYL.js.map +1 -0
- package/dist/{chunk-I7PSE6JW.js → chunk-F2IMUDXZ.js} +2 -75
- package/dist/chunk-F2IMUDXZ.js.map +1 -0
- package/dist/{chunk-QWWZ5CAQ.js → chunk-FFQEQTNW.js} +7 -9
- package/dist/chunk-FFQEQTNW.js.map +1 -0
- package/dist/chunk-FMUCXFII.js +76 -0
- package/dist/chunk-FMUCXFII.js.map +1 -0
- package/dist/{chunk-HW3OVDUF.js → chunk-J36DSWQK.js} +1 -1
- package/dist/{chunk-HW3OVDUF.js.map → chunk-J36DSWQK.js.map} +1 -1
- package/dist/{chunk-SQGMNID3.js → chunk-L4OXEN46.js} +4 -5
- package/dist/chunk-L4OXEN46.js.map +1 -0
- package/dist/{chunk-R77UEZ4E 3.js → chunk-M43Y4SSO.js} +1 -1
- package/dist/chunk-M43Y4SSO.js.map +1 -0
- package/dist/{chunk-IIELH4DL.js → chunk-MMZ7JXPU.js} +60 -223
- package/dist/chunk-MMZ7JXPU.js.map +1 -0
- package/dist/{chunk-NOAYCWCX 5.js → chunk-NECFR5MM.js} +394 -312
- package/dist/chunk-NECFR5MM.js.map +1 -0
- package/dist/{chunk-BC4IJKSL.js → chunk-SFZUDBL5.js} +40 -4
- package/dist/chunk-SFZUDBL5.js.map +1 -0
- package/dist/{chunk-XNXXZ43G.js → chunk-XWQCNGTQ.js} +748 -364
- package/dist/chunk-XWQCNGTQ.js.map +1 -0
- package/dist/components.d.ts +6 -6
- package/dist/components.js +15 -12
- package/dist/components.js.map +1 -1
- package/dist/{functions-D_kgHktt.d.ts → functions-DHebl8-F.d.ts} +1 -1
- package/dist/hooks.d.ts +59 -126
- package/dist/hooks.js +19 -28
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +63 -16
- package/dist/index.js +23 -24
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +21 -3
- package/dist/providers.js +2 -2
- package/dist/rbac/index.d.ts +146 -115
- package/dist/rbac/index.js +8 -11
- package/dist/theming/runtime.d.ts +1 -13
- package/dist/theming/runtime.js +1 -1
- package/dist/{timezone-_pgH8qrY.d.ts → timezone-CHhWg6b4.d.ts} +3 -10
- package/dist/{types-UU913iLA.d.ts → types-BeoeWV5I.d.ts} +8 -0
- package/dist/{types-CEpcvwwF.d.ts → types-CkbwOr4Y.d.ts} +6 -0
- package/dist/types.d.ts +2 -2
- package/dist/{usePublicRouteParams-TZe0gy-4.d.ts → usePublicRouteParams-1oMokgLF.d.ts} +34 -4
- package/dist/{useToast-C8gR5ir4.d.ts → useToast-AyaT-x7p.d.ts} +2 -2
- package/dist/utils.d.ts +4 -5
- package/dist/utils.js +15 -15
- package/dist/utils.js.map +1 -1
- package/docs/api/README.md +7 -1
- package/docs/api/classes/ColumnFactory.md +8 -8
- package/docs/api/classes/InvalidScopeError.md +4 -4
- package/docs/api/classes/Logger.md +1 -1
- package/docs/api/classes/MissingUserContextError.md +4 -4
- package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
- package/docs/api/classes/PermissionDeniedError.md +4 -4
- package/docs/api/classes/RBACAuditManager.md +1 -1
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +1 -1
- package/docs/api/classes/RBACError.md +4 -4
- package/docs/api/classes/RBACNotInitializedError.md +4 -4
- package/docs/api/classes/SecureSupabaseClient.md +18 -15
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +1 -1
- package/docs/api/enums/LogLevel.md +1 -1
- package/docs/api/enums/RBACErrorCode.md +1 -1
- package/docs/api/enums/RPCFunction.md +1 -1
- package/docs/api/interfaces/AddressFieldProps.md +1 -1
- package/docs/api/interfaces/AddressFieldRef.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +4 -4
- package/docs/api/interfaces/AutocompleteOptions.md +1 -1
- package/docs/api/interfaces/AvatarProps.md +1 -1
- package/docs/api/interfaces/BadgeProps.md +9 -2
- package/docs/api/interfaces/ButtonProps.md +7 -4
- package/docs/api/interfaces/CalendarProps.md +8 -5
- package/docs/api/interfaces/CardProps.md +8 -5
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/ComplianceResult.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +9 -9
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +24 -21
- package/docs/api/interfaces/DataTableColumn.md +31 -31
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
- package/docs/api/interfaces/DatabaseComplianceResult.md +1 -1
- package/docs/api/interfaces/DatabaseIssue.md +1 -1
- package/docs/api/interfaces/EmptyStateConfig.md +5 -5
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/ErrorBoundaryProps.md +147 -0
- package/docs/api/interfaces/ErrorBoundaryProviderProps.md +36 -0
- package/docs/api/interfaces/ErrorBoundaryState.md +75 -0
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/ExportColumn.md +1 -1
- package/docs/api/interfaces/ExportOptions.md +8 -8
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +1 -1
- package/docs/api/interfaces/FileReference.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +26 -23
- package/docs/api/interfaces/FooterProps.md +10 -8
- package/docs/api/interfaces/FormFieldProps.md +10 -10
- package/docs/api/interfaces/FormProps.md +1 -1
- package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +7 -4
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoggerConfig.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +14 -11
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +11 -11
- package/docs/api/interfaces/NavigationMenuProps.md +15 -15
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +30 -27
- package/docs/api/interfaces/PaceLoginPageProps.md +6 -4
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/ParsedAddress.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProgressProps.md +1 -1
- package/docs/api/interfaces/ProtectedRouteProps.md +7 -26
- package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
- package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
- package/docs/api/interfaces/PublicPageLayoutProps.md +7 -20
- package/docs/api/interfaces/QuickFix.md +1 -1
- package/docs/api/interfaces/RBACAccessValidateParams.md +1 -1
- package/docs/api/interfaces/RBACAccessValidateResult.md +1 -1
- package/docs/api/interfaces/RBACAuditLogParams.md +1 -1
- package/docs/api/interfaces/RBACAuditLogResult.md +1 -1
- package/docs/api/interfaces/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACContext.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +1 -1
- package/docs/api/interfaces/RBACPerformanceMetrics.md +1 -1
- package/docs/api/interfaces/RBACPermissionCheckParams.md +1 -1
- package/docs/api/interfaces/RBACPermissionCheckResult.md +1 -1
- package/docs/api/interfaces/RBACPermissionsGetParams.md +1 -1
- package/docs/api/interfaces/RBACPermissionsGetResult.md +1 -1
- package/docs/api/interfaces/RBACResult.md +1 -1
- package/docs/api/interfaces/RBACRoleGrantParams.md +1 -1
- package/docs/api/interfaces/RBACRoleGrantResult.md +1 -1
- package/docs/api/interfaces/RBACRoleRevokeParams.md +1 -1
- package/docs/api/interfaces/RBACRoleRevokeResult.md +1 -1
- package/docs/api/interfaces/RBACRoleValidateParams.md +1 -1
- package/docs/api/interfaces/RBACRoleValidateResult.md +1 -1
- package/docs/api/interfaces/RBACRolesListParams.md +1 -1
- package/docs/api/interfaces/RBACRolesListResult.md +1 -1
- package/docs/api/interfaces/RBACSessionTrackParams.md +1 -1
- package/docs/api/interfaces/RBACSessionTrackResult.md +1 -1
- package/docs/api/interfaces/ResourcePermissions.md +1 -1
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RoleManagementResult.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/RuntimeComplianceResult.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +9 -9
- package/docs/api/interfaces/SecureDataProviderProps.md +8 -8
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +3 -3
- package/docs/api/interfaces/SetupIssue.md +1 -1
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/TabsContentProps.md +1 -1
- package/docs/api/interfaces/TabsListProps.md +1 -1
- package/docs/api/interfaces/TabsProps.md +1 -1
- package/docs/api/interfaces/TabsTriggerProps.md +3 -3
- package/docs/api/interfaces/TextareaProps.md +1 -1
- package/docs/api/interfaces/ToastActionElement.md +4 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +58 -55
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +15 -13
- package/docs/api/interfaces/UseFormDialogOptions.md +1 -1
- package/docs/api/interfaces/UseFormDialogReturn.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +11 -9
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +8 -8
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +6 -6
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +9 -6
- package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
- package/docs/api/interfaces/UsePublicEventReturn.md +8 -5
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +4 -4
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +12 -9
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +10 -7
- package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +14 -11
- package/docs/api/interfaces/UserMenuProps.md +8 -6
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +575 -634
- package/docs/architecture/database-schema-requirements.md +161 -0
- package/docs/core-concepts/rbac-system.md +3 -3
- package/docs/documentation-index.md +2 -4
- package/docs/getting-started/cursor-rules.md +263 -0
- package/docs/getting-started/installation-guide.md +6 -1
- package/docs/getting-started/quick-start.md +6 -1
- package/docs/migration/DOCUMENTATION_STRUCTURE.md +441 -0
- package/docs/migration/MIGRATION_GUIDE.md +6 -28
- package/docs/migration/README.md +52 -6
- package/docs/migration/V0.5.190_TO_V0.6.1_MIGRATION.md +1153 -0
- package/docs/migration/V0.6.0_REACT_19_MIGRATION.md +227 -0
- package/docs/migration/database-changes-december-2025.md +3 -3
- package/docs/rbac/event-based-apps.md +1 -1
- package/docs/rbac/getting-started.md +1 -1
- package/docs/rbac/quick-start.md +1 -1
- package/docs/standards/README.md +40 -0
- package/docs/troubleshooting/migration.md +4 -4
- package/examples/PublicPages/PublicEventPage.tsx +1 -1
- package/package.json +12 -6
- package/scripts/audit/core/checks/accessibility.cjs +197 -0
- package/scripts/audit/core/checks/api-usage.cjs +191 -0
- package/scripts/audit/core/checks/bundle.cjs +142 -0
- package/scripts/{check-pace-core-compliance.cjs → audit/core/checks/compliance.cjs} +737 -691
- package/scripts/audit/core/checks/config.cjs +54 -0
- package/scripts/audit/core/checks/coverage.cjs +84 -0
- package/scripts/audit/core/checks/dependencies.cjs +454 -0
- package/scripts/audit/core/checks/documentation.cjs +203 -0
- package/scripts/audit/core/checks/environment.cjs +128 -0
- package/scripts/audit/core/checks/error-handling.cjs +299 -0
- package/scripts/audit/core/checks/forms.cjs +172 -0
- package/scripts/audit/core/checks/heuristics.cjs +68 -0
- package/scripts/audit/core/checks/hooks.cjs +334 -0
- package/scripts/audit/core/checks/imports.cjs +244 -0
- package/scripts/audit/core/checks/performance.cjs +325 -0
- package/scripts/audit/core/checks/routes.cjs +117 -0
- package/scripts/audit/core/checks/state.cjs +130 -0
- package/scripts/audit/core/checks/structure.cjs +65 -0
- package/scripts/audit/core/checks/style.cjs +584 -0
- package/scripts/audit/core/checks/testing.cjs +122 -0
- package/scripts/audit/core/checks/typescript.cjs +61 -0
- package/scripts/audit/core/scanner.cjs +199 -0
- package/scripts/audit/core/utils.cjs +137 -0
- package/scripts/audit/index.cjs +223 -0
- package/scripts/audit/reporters/console.cjs +151 -0
- package/scripts/audit/reporters/json.cjs +54 -0
- package/scripts/audit/reporters/markdown.cjs +124 -0
- package/scripts/audit-consuming-app.cjs +86 -0
- package/scripts/build-docs/build-decision.js +240 -0
- package/scripts/build-docs/cache-utils.js +105 -0
- package/scripts/build-docs/content-normalization.js +150 -0
- package/scripts/build-docs/file-utils.js +105 -0
- package/scripts/build-docs/git-utils.js +86 -0
- package/scripts/build-docs/hash-utils.js +116 -0
- package/scripts/build-docs/typedoc-runner.js +220 -0
- package/scripts/build-docs-incremental.js +77 -913
- package/scripts/install-cursor-rules.cjs +236 -0
- package/scripts/utils/command-runner.js +16 -11
- package/scripts/validate-formats.js +61 -56
- package/scripts/validate-master.js +74 -69
- package/scripts/validate-pre-publish.js +70 -65
- package/src/__tests__/helpers/test-providers.tsx +1 -1
- package/src/__tests__/helpers/test-utils.tsx +1 -1
- package/src/__tests__/hooks/usePermissions.test.ts +2 -2
- package/src/components/Alert/Alert.test.tsx +12 -18
- package/src/components/Alert/Alert.tsx +5 -7
- package/src/components/Avatar/Avatar.test.tsx +4 -4
- package/src/components/Badge/Badge.tsx +16 -4
- package/src/components/Button/Button.tsx +27 -4
- package/src/components/Calendar/Calendar.tsx +9 -3
- package/src/components/Card/Card.tsx +4 -0
- package/src/components/Checkbox/Checkbox.test.tsx +12 -12
- package/src/components/Checkbox/Checkbox.tsx +2 -2
- package/src/components/DataTable/DataTable.test.tsx +57 -93
- package/src/components/DataTable/DataTable.tsx +40 -6
- package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +5 -6
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +29 -7
- package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx +12 -12
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +2 -3
- package/src/components/DataTable/components/AccessDeniedPage.tsx +17 -26
- package/src/components/DataTable/components/ActionButtons.tsx +10 -7
- package/src/components/DataTable/components/BulkOperationsDropdown.tsx +2 -2
- package/src/components/DataTable/components/ColumnFilter.tsx +10 -0
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +12 -0
- package/src/components/DataTable/components/DataTableBody.tsx +8 -0
- package/src/components/DataTable/components/DataTableCore.tsx +200 -561
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +11 -0
- package/src/components/DataTable/components/DataTableLayout.tsx +559 -0
- package/src/components/DataTable/components/DataTableModals.tsx +9 -1
- package/src/components/DataTable/components/DataTableToolbar.tsx +8 -0
- package/src/components/DataTable/components/DraggableColumnHeader.tsx +12 -0
- package/src/components/DataTable/components/EditFields.tsx +307 -0
- package/src/components/DataTable/components/EditableRow.tsx +9 -1
- package/src/components/DataTable/components/EmptyState.tsx +10 -0
- package/src/components/DataTable/components/FilterRow.tsx +12 -0
- package/src/components/DataTable/components/GroupHeader.tsx +12 -0
- package/src/components/DataTable/components/GroupingDropdown.tsx +12 -0
- package/src/components/DataTable/components/ImportModal.tsx +7 -0
- package/src/components/DataTable/components/LoadingState.tsx +6 -0
- package/src/components/DataTable/components/PaginationControls.tsx +16 -1
- package/src/components/DataTable/components/RowComponent.tsx +391 -0
- package/src/components/DataTable/components/UnifiedTableBody.tsx +62 -852
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +16 -4
- package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +4 -2
- package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +23 -23
- package/src/components/DataTable/components/__tests__/EditableRow.test.tsx +11 -11
- package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +36 -36
- package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +27 -27
- package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +39 -39
- package/src/components/DataTable/components/__tests__/UnifiedTableBody.test.tsx +33 -33
- package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +29 -29
- package/src/components/DataTable/components/cellValueUtils.ts +40 -0
- package/src/components/DataTable/components/hooks/useImportModalFocus.ts +53 -0
- package/src/components/DataTable/components/hooks/usePermissionTracking.ts +126 -0
- package/src/components/DataTable/context/DataTableContext.tsx +50 -0
- package/src/components/DataTable/core/ColumnFactory.ts +31 -0
- package/src/components/DataTable/core/DataTableContext.tsx +32 -1
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +10 -0
- package/src/components/DataTable/hooks/useColumnReordering.ts +14 -2
- package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +10 -0
- package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +16 -0
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +124 -32
- package/src/components/DataTable/hooks/useDataTableState.ts +35 -1
- package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +12 -0
- package/src/components/DataTable/hooks/useKeyboardNavigation.ts +2 -2
- package/src/components/DataTable/hooks/useServerSideDataEffect.ts +11 -0
- package/src/components/DataTable/hooks/useTableColumns.ts +8 -0
- package/src/components/DataTable/hooks/useTableHandlers.ts +14 -0
- package/src/components/DataTable/styles.ts +6 -6
- package/src/components/DataTable/types.ts +6 -10
- package/src/components/DataTable/utils/a11yUtils.ts +7 -0
- package/src/components/DataTable/utils/debugTools.ts +18 -113
- package/src/components/DataTable/utils/errorHandling.ts +12 -0
- package/src/components/DataTable/utils/exportUtils.ts +9 -0
- package/src/components/DataTable/utils/flexibleImport.ts +12 -48
- package/src/components/DataTable/utils/paginationUtils.ts +8 -0
- package/src/components/DataTable/utils/performanceUtils.ts +5 -1
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +8 -14
- package/src/components/Dialog/Dialog.tsx +8 -7
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +180 -1
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +46 -6
- package/src/components/ErrorBoundary/ErrorBoundaryContext.tsx +129 -0
- package/src/components/ErrorBoundary/index.ts +27 -2
- package/src/components/EventSelector/EventSelector.tsx +4 -1
- package/src/components/FileDisplay/FileDisplay.test.tsx +2 -2
- package/src/components/FileDisplay/FileDisplay.tsx +32 -18
- package/src/components/FileUpload/FileUpload.tsx +22 -2
- package/src/components/Footer/Footer.test.tsx +16 -16
- package/src/components/Footer/Footer.tsx +15 -12
- package/src/components/Form/Form.test.tsx +36 -15
- package/src/components/Form/Form.tsx +31 -26
- package/src/components/Header/Header.tsx +22 -11
- package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +40 -40
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +1 -1
- package/src/components/Input/Input.test.tsx +2 -2
- package/src/components/Input/Input.tsx +36 -34
- package/src/components/Label/Label.tsx +1 -1
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +4 -4
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +1 -1
- package/src/components/LoginForm/LoginForm.test.tsx +42 -42
- package/src/components/LoginForm/LoginForm.tsx +12 -8
- package/src/components/NavigationMenu/NavigationMenu.tsx +15 -514
- package/src/components/NavigationMenu/types.ts +56 -0
- package/src/components/NavigationMenu/useNavigationFiltering.ts +390 -0
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +3 -0
- package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +1 -1
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +54 -52
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +33 -12
- package/src/components/PaceAppLayout/README.md +1 -1
- package/src/components/PaceAppLayout/test-setup.tsx +1 -2
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +4 -1
- package/src/components/PasswordChange/PasswordChangeForm.test.tsx +33 -33
- package/src/components/PasswordChange/PasswordChangeForm.tsx +10 -1
- package/src/components/Progress/Progress.tsx +1 -1
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +3 -9
- package/src/components/PublicLayout/PublicPageLayout.tsx +3 -6
- package/src/components/PublicLayout/PublicPageProvider.tsx +4 -0
- package/src/components/Select/Select.tsx +95 -438
- package/src/components/Select/context.ts +23 -0
- package/src/components/Select/hooks/useSelectEvents.ts +87 -0
- package/src/components/Select/hooks/useSelectSearch.ts +91 -0
- package/src/components/Select/hooks/useSelectState.ts +104 -0
- package/src/components/Select/index.ts +9 -1
- package/src/components/Select/types.ts +123 -0
- package/src/components/Select/utils/text.ts +26 -0
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +5 -6
- package/src/components/Switch/Switch.tsx +4 -4
- package/src/components/Table/Table.tsx +1 -1
- package/src/components/Tabs/Tabs.tsx +1 -1
- package/src/components/Textarea/Textarea.tsx +27 -29
- package/src/components/Toast/Toast.tsx +5 -1
- package/src/components/Tooltip/Tooltip.tsx +3 -3
- package/src/components/UserMenu/UserMenu.test.tsx +24 -11
- package/src/components/UserMenu/UserMenu.tsx +22 -19
- package/src/components/index.ts +2 -2
- package/src/hooks/__tests__/hooks.integration.test.tsx +80 -55
- package/src/hooks/__tests__/index.unit.test.ts +2 -5
- package/src/hooks/__tests__/useStorage.unit.test.ts +36 -36
- package/src/hooks/index.ts +1 -2
- package/src/hooks/public/usePublicEvent.ts +5 -1
- package/src/hooks/public/usePublicEventLogo.ts +5 -1
- package/src/hooks/public/usePublicFileDisplay.ts +4 -0
- package/src/hooks/public/usePublicRouteParams.ts +5 -1
- package/src/hooks/services/useAuth.ts +32 -0
- package/src/hooks/services/useCurrentEvent.ts +6 -0
- package/src/hooks/services/useCurrentOrganisation.ts +6 -0
- package/src/hooks/useDataTableState.ts +8 -18
- package/src/hooks/useDebounce.ts +9 -0
- package/src/hooks/useEventTheme.ts +6 -0
- package/src/hooks/useFileDisplay.ts +4 -0
- package/src/hooks/useFileReference.ts +25 -7
- package/src/hooks/useFileUrl.ts +11 -1
- package/src/hooks/useFocusManagement.ts +16 -2
- package/src/hooks/useFocusTrap.ts +7 -4
- package/src/hooks/useFormDialog.ts +8 -7
- package/src/hooks/useInactivityTracker.ts +4 -1
- package/src/hooks/useKeyboardShortcuts.ts +4 -0
- package/src/hooks/useOrganisationPermissions.ts +4 -0
- package/src/hooks/useOrganisationSecurity.ts +4 -0
- package/src/hooks/usePerformanceMonitor.ts +4 -0
- package/src/hooks/usePermissionCache.ts +8 -1
- package/src/hooks/useQueryCache.ts +12 -1
- package/src/hooks/useSessionRestoration.ts +4 -0
- package/src/hooks/useStorage.ts +4 -0
- package/src/hooks/useToast.ts +3 -3
- package/src/index.ts +2 -1
- package/src/providers/__tests__/OrganisationProvider.test.tsx +115 -49
- package/src/providers/__tests__/ProviderLifecycle.test.tsx +21 -6
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +10 -10
- package/src/providers/services/AuthServiceProvider.tsx +18 -0
- package/src/providers/services/EventServiceProvider.tsx +18 -0
- package/src/providers/services/InactivityServiceProvider.tsx +18 -0
- package/src/providers/services/OrganisationServiceProvider.tsx +18 -0
- package/src/providers/services/UnifiedAuthProvider.tsx +58 -22
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +33 -7
- package/src/rbac/README.md +1 -1
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +26 -26
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +4 -5
- package/src/rbac/adapters.tsx +14 -5
- package/src/rbac/api.ts +100 -67
- package/src/rbac/components/EnhancedNavigationMenu.tsx +1 -1
- package/src/rbac/components/NavigationGuard.tsx +1 -1
- package/src/rbac/components/NavigationProvider.tsx +5 -2
- package/src/rbac/components/PagePermissionGuard.tsx +158 -18
- package/src/rbac/components/PagePermissionProvider.tsx +1 -1
- package/src/rbac/components/PermissionEnforcer.tsx +1 -1
- package/src/rbac/components/RoleBasedRouter.tsx +6 -2
- package/src/rbac/components/SecureDataProvider.test.tsx +84 -49
- package/src/rbac/components/SecureDataProvider.tsx +21 -6
- package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +24 -14
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +7 -0
- package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +14 -6
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +15 -4
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +148 -24
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +81 -15
- package/src/rbac/engine.ts +38 -14
- package/src/rbac/hooks/permissions/index.ts +7 -0
- package/src/rbac/hooks/permissions/useAccessLevel.ts +105 -0
- package/src/rbac/hooks/permissions/useCachedPermissions.ts +79 -0
- package/src/rbac/hooks/permissions/useCan.ts +347 -0
- package/src/rbac/hooks/permissions/useHasAllPermissions.ts +90 -0
- package/src/rbac/hooks/permissions/useHasAnyPermission.ts +90 -0
- package/src/rbac/hooks/permissions/useMultiplePermissions.ts +93 -0
- package/src/rbac/hooks/permissions/usePermissions.ts +253 -0
- package/src/rbac/hooks/useCan.test.ts +71 -64
- package/src/rbac/hooks/usePermissions.ts +14 -995
- package/src/rbac/hooks/useResourcePermissions.test.ts +54 -18
- package/src/rbac/hooks/useResourcePermissions.ts +14 -4
- package/src/rbac/hooks/useSecureSupabase.ts +33 -13
- package/src/rbac/permissions.ts +0 -30
- package/src/rbac/secureClient.ts +212 -61
- package/src/rbac/types.ts +8 -0
- package/src/theming/__tests__/parseEventColours.test.ts +6 -9
- package/src/theming/parseEventColours.ts +5 -19
- package/src/types/vitest-globals.d.ts +51 -26
- package/src/utils/__mocks__/supabaseMock.ts +1 -3
- package/src/utils/__tests__/formatting.unit.test.ts +4 -4
- package/src/utils/__tests__/index.unit.test.ts +2 -2
- package/src/utils/audit/audit.ts +0 -3
- package/src/utils/core/cn.ts +1 -1
- package/src/utils/file-reference/index.ts +53 -1
- package/src/utils/formatting/formatting.ts +8 -18
- package/src/utils/index.ts +0 -1
- package/src/utils/security/secureDataAccess.test.ts +31 -20
- package/src/utils/security/secureDataAccess.ts +4 -3
- package/dist/chunk-6C4YBBJM.js +0 -628
- package/dist/chunk-6C4YBBJM.js.map +0 -1
- package/dist/chunk-7D4SUZUM.js 2.map +0 -1
- package/dist/chunk-7EQTDTTJ.js 2.map +0 -1
- package/dist/chunk-7EQTDTTJ.js.map +0 -1
- package/dist/chunk-7FLMSG37.js 2.map +0 -1
- package/dist/chunk-7FLMSG37.js.map +0 -1
- package/dist/chunk-BC4IJKSL.js.map +0 -1
- package/dist/chunk-E3SPN4VZ.js +0 -12917
- package/dist/chunk-E3SPN4VZ.js.map +0 -1
- package/dist/chunk-E66EQZE6 5.js +0 -37
- package/dist/chunk-E66EQZE6.js 2.map +0 -1
- package/dist/chunk-HWIIPPNI.js.map +0 -1
- package/dist/chunk-I7PSE6JW 5.js +0 -191
- package/dist/chunk-I7PSE6JW.js 2.map +0 -1
- package/dist/chunk-I7PSE6JW.js.map +0 -1
- package/dist/chunk-IIELH4DL.js.map +0 -1
- package/dist/chunk-KNC55RTG.js 5.map +0 -1
- package/dist/chunk-KNC55RTG.js.map +0 -1
- package/dist/chunk-KQCRWDSA.js 5.map +0 -1
- package/dist/chunk-LFNCN2SP.js +0 -412
- package/dist/chunk-LFNCN2SP.js 2.map +0 -1
- package/dist/chunk-LFNCN2SP.js.map +0 -1
- package/dist/chunk-LMC26NLJ 2.js +0 -84
- package/dist/chunk-NOAYCWCX.js +0 -4993
- package/dist/chunk-NOAYCWCX.js.map +0 -1
- package/dist/chunk-QWWZ5CAQ.js 3.map +0 -1
- package/dist/chunk-QWWZ5CAQ.js.map +0 -1
- package/dist/chunk-QXHPKYJV 3.js +0 -113
- package/dist/chunk-R77UEZ4E.js +0 -68
- package/dist/chunk-R77UEZ4E.js.map +0 -1
- package/dist/chunk-SQGMNID3.js.map +0 -1
- package/dist/chunk-VBXEHIUJ.js 6.map +0 -1
- package/dist/chunk-XNXXZ43G.js.map +0 -1
- package/dist/chunk-ZSAAAMVR 6.js +0 -25
- package/dist/components.js 5.map +0 -1
- package/dist/styles/index 2.js +0 -12
- package/dist/styles/index.js 5.map +0 -1
- package/dist/theming/runtime 5.js +0 -19
- package/dist/theming/runtime.js 5.map +0 -1
- package/docs/api/classes/ErrorBoundary.md +0 -144
- package/docs/migration/quick-migration-guide.md +0 -356
- package/docs/migration/service-architecture.md +0 -281
- package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +0 -680
- package/src/hooks/useSecureDataAccess.test.ts +0 -559
- package/src/hooks/useSecureDataAccess.ts +0 -666
- /package/dist/{DataTable-5FU7IESH.js.map → DataTable-TPTKCX4D.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-RGJTDE2C.js.map → UnifiedAuthProvider-CH6Z342H.js.map} +0 -0
- /package/dist/{api-N774RPUA.js.map → api-MVVQZLJI.js.map} +0 -0
- /package/docs/migration/{organisation-context-timing-fix.md → V0.3.44_organisation-context-timing-fix.md} +0 -0
- /package/docs/migration/{rbac-migration.md → V0.4.0_rbac-migration.md} +0 -0
- /package/docs/migration/{person-scoped-profiles-migration-guide.md → V0.5.190_person-scoped-profiles-migration-guide.md} +0 -0
- /package/examples/{rbac → RBAC}/CompleteRBACExample.tsx +0 -0
- /package/examples/{rbac → RBAC}/EventBasedApp.tsx +0 -0
- /package/examples/{rbac → RBAC}/PermissionExample.tsx +0 -0
- /package/examples/{rbac → RBAC}/index.ts +0 -0
package/dist/rbac/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { U as UUID, g as PermissionCacheKey, h as AuditEventSource, i as RBACAuditEvent, a as PermissionCheck, S as Scope, A as AccessLevel, b as PermissionMap, j as RBACAppContext, k as RBACRoleContext, P as Permission, l as UserRBACContext } from '../types-
|
|
2
|
-
export { E as EventAppRole, G as GlobalRole, I as InvalidScopeError, M as MissingUserContextError, O as Operation, e as OrganisationContextRequiredError, c as OrganisationRole, d as PermissionDeniedError, R as RBACError, f as RBACNotInitializedError } from '../types-
|
|
3
|
-
export { A as AccessLevelContext, s as AuditEventType, P as PermissionSource, d as RBACAccessValidateParams, e as RBACAccessValidateResult, q as RBACAuditLogParams, r as RBACAuditLogResult, t as RBACContext, w as RBACErrorCode, v as RBACFunctionResponse, f as RBACPageAccessCheckParams, R as RBACPermissionCheckParams, a as RBACPermissionCheckResult, b as RBACPermissionsGetParams, c as RBACPermissionsGetResult, u as RBACResult, g as RBACRoleGrantParams, h as RBACRoleGrantResult, i as RBACRoleRevokeParams, j as RBACRoleRevokeResult, m as RBACRoleValidateParams, n as RBACRoleValidateResult, k as RBACRolesListParams, l as RBACRolesListResult, o as RBACSessionTrackParams, p as RBACSessionTrackResult, x as RPCFunction, S as SessionType } from '../functions-
|
|
1
|
+
import { U as UUID, g as PermissionCacheKey, h as AuditEventSource, i as RBACAuditEvent, a as PermissionCheck, S as Scope, A as AccessLevel, b as PermissionMap, j as RBACAppContext, k as RBACRoleContext, P as Permission, l as UserRBACContext } from '../types-BeoeWV5I.js';
|
|
2
|
+
export { E as EventAppRole, G as GlobalRole, I as InvalidScopeError, M as MissingUserContextError, O as Operation, e as OrganisationContextRequiredError, c as OrganisationRole, d as PermissionDeniedError, R as RBACError, f as RBACNotInitializedError } from '../types-BeoeWV5I.js';
|
|
3
|
+
export { A as AccessLevelContext, s as AuditEventType, P as PermissionSource, d as RBACAccessValidateParams, e as RBACAccessValidateResult, q as RBACAuditLogParams, r as RBACAuditLogResult, t as RBACContext, w as RBACErrorCode, v as RBACFunctionResponse, f as RBACPageAccessCheckParams, R as RBACPermissionCheckParams, a as RBACPermissionCheckResult, b as RBACPermissionsGetParams, c as RBACPermissionsGetResult, u as RBACResult, g as RBACRoleGrantParams, h as RBACRoleGrantResult, i as RBACRoleRevokeParams, j as RBACRoleRevokeResult, m as RBACRoleValidateParams, n as RBACRoleValidateResult, k as RBACRolesListParams, l as RBACRolesListResult, o as RBACSessionTrackParams, p as RBACSessionTrackResult, x as RPCFunction, S as SessionType } from '../functions-DHebl8-F.js';
|
|
4
4
|
import { SupabaseClient } from '@supabase/supabase-js';
|
|
5
5
|
import { D as Database } from '../database.generated-CzIvgcPu.js';
|
|
6
6
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
@@ -122,8 +122,10 @@ declare function isDevelopmentMode(): boolean;
|
|
|
122
122
|
* This client automatically injects organisation context into all requests
|
|
123
123
|
* and prevents queries that don't have the required context.
|
|
124
124
|
*
|
|
125
|
-
* Note:
|
|
126
|
-
*
|
|
125
|
+
* Note: For non-super-admins, organisationId is required. Super-admins can operate
|
|
126
|
+
* without organisationId to access system-wide tables (like core_organisations).
|
|
127
|
+
* Callers should derive organisationId from eventId before creating this client
|
|
128
|
+
* if working with event-required apps.
|
|
127
129
|
*/
|
|
128
130
|
declare class SecureSupabaseClient {
|
|
129
131
|
private supabase;
|
|
@@ -134,7 +136,19 @@ declare class SecureSupabaseClient {
|
|
|
134
136
|
private eventId?;
|
|
135
137
|
private appId?;
|
|
136
138
|
private isSuperAdmin;
|
|
137
|
-
|
|
139
|
+
private usesExistingClient;
|
|
140
|
+
/**
|
|
141
|
+
* RPC functions that are safe to call without organisation context.
|
|
142
|
+
*
|
|
143
|
+
* These functions must:
|
|
144
|
+
* - rely on JWT context (auth.uid()) for authentication
|
|
145
|
+
* - not read or write organisation-scoped data
|
|
146
|
+
*
|
|
147
|
+
* This allowlist enables compliant consuming apps to use `secureSupabase.rpc(...)`
|
|
148
|
+
* even before an organisation is selected (common during initial page load/refresh).
|
|
149
|
+
*/
|
|
150
|
+
private static readonly GLOBAL_RPC_ALLOWLIST;
|
|
151
|
+
constructor(supabaseUrl: string, supabaseKey: string, organisationId: UUID | null, eventId?: string, appId?: UUID, isSuperAdmin?: boolean, existingClient?: SupabaseClient<Database>);
|
|
138
152
|
/**
|
|
139
153
|
* Setup context injection for all database operations
|
|
140
154
|
*/
|
|
@@ -170,18 +184,36 @@ declare class SecureSupabaseClient {
|
|
|
170
184
|
* - Super admins: No org filter (see all users) - RLS will allow access
|
|
171
185
|
* - Non-super-admins: Apply org filter as defense in depth - RLS will also filter
|
|
172
186
|
*
|
|
187
|
+
* For system-wide tables (like core_organisations):
|
|
188
|
+
* - Super admins: No org filter (see all records) - RLS will allow access
|
|
189
|
+
* - Non-super-admins: Apply org filter as defense in depth - RLS will also filter
|
|
190
|
+
*
|
|
173
191
|
* For other tables:
|
|
174
192
|
* - Always apply org filter unless super admin bypasses it
|
|
175
193
|
*/
|
|
176
194
|
private addOrganisationFilter;
|
|
177
195
|
/**
|
|
178
196
|
* Validate that required context is present
|
|
197
|
+
* Super-admins can operate without organisation context
|
|
179
198
|
*/
|
|
180
199
|
private validateContext;
|
|
200
|
+
/**
|
|
201
|
+
* Determine whether a table requires organisation context.
|
|
202
|
+
* Tables without an organisation_id column (or global configuration tables) are safe without org context.
|
|
203
|
+
*/
|
|
204
|
+
private tableRequiresOrganisationContext;
|
|
205
|
+
/**
|
|
206
|
+
* Validate context for a specific table operation.
|
|
207
|
+
*/
|
|
208
|
+
private validateContextForTable;
|
|
209
|
+
/**
|
|
210
|
+
* Validate context for a specific RPC call.
|
|
211
|
+
*/
|
|
212
|
+
private validateContextForRpc;
|
|
181
213
|
/**
|
|
182
214
|
* Get the current organisation ID
|
|
183
215
|
*/
|
|
184
|
-
getOrganisationId(): UUID;
|
|
216
|
+
getOrganisationId(): UUID | null;
|
|
185
217
|
/**
|
|
186
218
|
* Get the current event ID
|
|
187
219
|
*/
|
|
@@ -194,7 +226,7 @@ declare class SecureSupabaseClient {
|
|
|
194
226
|
* Create a new client with updated context
|
|
195
227
|
*/
|
|
196
228
|
withContext(updates: {
|
|
197
|
-
organisationId?: UUID;
|
|
229
|
+
organisationId?: UUID | null;
|
|
198
230
|
eventId?: string;
|
|
199
231
|
appId?: UUID;
|
|
200
232
|
isSuperAdmin?: boolean;
|
|
@@ -210,10 +242,10 @@ declare class SecureSupabaseClient {
|
|
|
210
242
|
*
|
|
211
243
|
* @param supabaseUrl - Supabase project URL
|
|
212
244
|
* @param supabaseKey - Supabase publishable key or anon key (accepts both legacy anon keys and modern publishable keys)
|
|
213
|
-
* @param organisationId -
|
|
245
|
+
* @param organisationId - Organisation ID (optional for super-admins)
|
|
214
246
|
* @param eventId - Optional event ID
|
|
215
247
|
* @param appId - Optional app ID
|
|
216
|
-
* @param isSuperAdmin - Optional super admin flag (defaults to false)
|
|
248
|
+
* @param isSuperAdmin - Optional super admin flag (defaults to false). When true, organisationId can be null.
|
|
217
249
|
* @returns SecureSupabaseClient instance
|
|
218
250
|
*
|
|
219
251
|
* @example
|
|
@@ -226,9 +258,19 @@ declare class SecureSupabaseClient {
|
|
|
226
258
|
* 'app-789',
|
|
227
259
|
* false // isSuperAdmin
|
|
228
260
|
* );
|
|
261
|
+
*
|
|
262
|
+
* // For super-admins, organisationId can be null
|
|
263
|
+
* const superAdminClient = createSecureClient(
|
|
264
|
+
* 'https://your-project.supabase.co',
|
|
265
|
+
* 'your-publishable-key-or-anon-key',
|
|
266
|
+
* null, // organisationId not required for super-admins
|
|
267
|
+
* undefined,
|
|
268
|
+
* undefined,
|
|
269
|
+
* true // isSuperAdmin
|
|
270
|
+
* );
|
|
229
271
|
* ```
|
|
230
272
|
*/
|
|
231
|
-
declare function createSecureClient(supabaseUrl: string, supabaseKey: string, organisationId: UUID, eventId?: string, appId?: UUID, isSuperAdmin?: boolean): SecureSupabaseClient;
|
|
273
|
+
declare function createSecureClient(supabaseUrl: string, supabaseKey: string, organisationId: UUID | null, eventId?: string, appId?: UUID, isSuperAdmin?: boolean): SecureSupabaseClient;
|
|
232
274
|
/**
|
|
233
275
|
* Create a secure client from an existing Supabase client
|
|
234
276
|
*
|
|
@@ -238,7 +280,7 @@ declare function createSecureClient(supabaseUrl: string, supabaseKey: string, or
|
|
|
238
280
|
* @param appId - Optional app ID
|
|
239
281
|
* @returns SecureSupabaseClient instance
|
|
240
282
|
*/
|
|
241
|
-
declare function fromSupabaseClient(client: SupabaseClient<Database>, organisationId: UUID, eventId?: string, appId?: UUID): SecureSupabaseClient;
|
|
283
|
+
declare function fromSupabaseClient(client: SupabaseClient<Database>, organisationId: UUID | null, eventId?: string, appId?: UUID, isSuperAdmin?: boolean): SecureSupabaseClient;
|
|
242
284
|
|
|
243
285
|
/**
|
|
244
286
|
* RBAC Cache Implementation
|
|
@@ -838,7 +880,7 @@ interface PagePermissionGuardProps {
|
|
|
838
880
|
/** Loading state content */
|
|
839
881
|
loading?: React__default.ReactNode;
|
|
840
882
|
}
|
|
841
|
-
declare const PagePermissionGuard: React__default.MemoExoticComponent<({ pageName, operation, children, fallback, strictMode, auditLog, pageId, scope, onDenied, loading }: PagePermissionGuardProps) => string | number | boolean | Iterable<React__default.ReactNode> | react_jsx_runtime.JSX.Element | null>;
|
|
883
|
+
declare const PagePermissionGuard: React__default.MemoExoticComponent<({ pageName, operation, children, fallback, strictMode, auditLog, pageId, scope, onDenied, loading }: PagePermissionGuardProps) => string | number | bigint | boolean | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null>;
|
|
842
884
|
|
|
843
885
|
interface DataAccessRecord {
|
|
844
886
|
table: string;
|
|
@@ -1376,126 +1418,118 @@ interface ResourcePermissions {
|
|
|
1376
1418
|
declare function useResourcePermissions(resource: string, options?: UseResourcePermissionsOptions): ResourcePermissions;
|
|
1377
1419
|
|
|
1378
1420
|
/**
|
|
1379
|
-
*
|
|
1380
|
-
* @package @jmruthers/pace-core
|
|
1381
|
-
* @module RBAC/Hooks
|
|
1382
|
-
* @since 1.0.0
|
|
1383
|
-
*
|
|
1384
|
-
* This module provides React hooks for RBAC functionality.
|
|
1385
|
-
*/
|
|
1386
|
-
|
|
1387
|
-
/**
|
|
1388
|
-
* Hook to get user's permissions in a scope
|
|
1421
|
+
* Hook to get user's access level in a scope
|
|
1389
1422
|
*
|
|
1390
1423
|
* @param userId - User ID
|
|
1391
|
-
* @param
|
|
1392
|
-
* @
|
|
1393
|
-
* @param appId - Application ID (optional)
|
|
1394
|
-
* @returns Permission state and methods
|
|
1424
|
+
* @param scope - Scope for access level checking
|
|
1425
|
+
* @returns Access level state and methods
|
|
1395
1426
|
*
|
|
1396
1427
|
* @example
|
|
1397
1428
|
* ```tsx
|
|
1398
1429
|
* function MyComponent() {
|
|
1399
|
-
* const {
|
|
1400
|
-
* userId,
|
|
1401
|
-
* organisationId,
|
|
1402
|
-
* eventId,
|
|
1403
|
-
* appId
|
|
1404
|
-
* );
|
|
1430
|
+
* const { accessLevel, isLoading, error } = useAccessLevel(userId, scope);
|
|
1405
1431
|
*
|
|
1406
|
-
* if (isLoading) return <div>Loading...</div>;
|
|
1432
|
+
* if (isLoading) return <div>Loading access level...</div>;
|
|
1407
1433
|
* if (error) return <div>Error: {error.message}</div>;
|
|
1408
1434
|
*
|
|
1409
1435
|
* return (
|
|
1410
1436
|
* <div>
|
|
1411
|
-
*
|
|
1412
|
-
* {
|
|
1437
|
+
* Access Level: {accessLevel}
|
|
1438
|
+
* {accessLevel >= AccessLevel.ADMIN && <AdminPanel />}
|
|
1413
1439
|
* </div>
|
|
1414
1440
|
* );
|
|
1415
1441
|
* }
|
|
1416
1442
|
* ```
|
|
1417
1443
|
*/
|
|
1418
|
-
declare function
|
|
1419
|
-
|
|
1444
|
+
declare function useAccessLevel(userId: UUID, scope: Scope): {
|
|
1445
|
+
accessLevel: AccessLevel;
|
|
1420
1446
|
isLoading: boolean;
|
|
1421
1447
|
error: Error | null;
|
|
1422
|
-
hasPermission: (permission: Permission) => boolean;
|
|
1423
|
-
hasAnyPermission: (permissionList: Permission[]) => boolean;
|
|
1424
|
-
hasAllPermissions: (permissionList: Permission[]) => boolean;
|
|
1425
1448
|
refetch: () => Promise<void>;
|
|
1426
1449
|
};
|
|
1450
|
+
|
|
1427
1451
|
/**
|
|
1428
|
-
* Hook to
|
|
1452
|
+
* Hook to get cached permissions with TTL management
|
|
1429
1453
|
*
|
|
1430
1454
|
* @param userId - User ID
|
|
1431
1455
|
* @param scope - Scope for permission checking
|
|
1432
|
-
* @
|
|
1433
|
-
* @param pageId - Optional page ID
|
|
1434
|
-
* @param useCache - Whether to use cached results
|
|
1435
|
-
* @param appName - Optional app name (for PORTAL/ADMIN special case)
|
|
1436
|
-
* @returns Permission check state and methods
|
|
1456
|
+
* @returns Cached permission state and methods
|
|
1437
1457
|
*
|
|
1438
1458
|
* @example
|
|
1439
1459
|
* ```tsx
|
|
1440
1460
|
* function MyComponent() {
|
|
1441
|
-
* const {
|
|
1461
|
+
* const { permissions, isLoading, error, invalidateCache } = useCachedPermissions(userId, scope);
|
|
1442
1462
|
*
|
|
1443
|
-
* if (isLoading) return <div>
|
|
1463
|
+
* if (isLoading) return <div>Loading cached permissions...</div>;
|
|
1444
1464
|
* if (error) return <div>Error: {error.message}</div>;
|
|
1445
1465
|
*
|
|
1446
|
-
* return
|
|
1466
|
+
* return (
|
|
1467
|
+
* <div>
|
|
1468
|
+
* {permissions['read:users'] && <UserList />}
|
|
1469
|
+
* <button onClick={invalidateCache}>Refresh Permissions</button>
|
|
1470
|
+
* </div>
|
|
1471
|
+
* );
|
|
1447
1472
|
* }
|
|
1448
1473
|
* ```
|
|
1449
1474
|
*/
|
|
1450
|
-
declare function
|
|
1451
|
-
|
|
1475
|
+
declare function useCachedPermissions(userId: UUID, scope: Scope): {
|
|
1476
|
+
permissions: PermissionMap;
|
|
1452
1477
|
isLoading: boolean;
|
|
1453
1478
|
error: Error | null;
|
|
1479
|
+
invalidateCache: () => void;
|
|
1454
1480
|
refetch: () => Promise<void>;
|
|
1455
1481
|
};
|
|
1482
|
+
|
|
1456
1483
|
/**
|
|
1457
|
-
* Hook to
|
|
1484
|
+
* Hook to check if user can perform an action
|
|
1458
1485
|
*
|
|
1459
1486
|
* @param userId - User ID
|
|
1460
|
-
* @param scope - Scope for
|
|
1461
|
-
* @
|
|
1487
|
+
* @param scope - Scope for permission checking
|
|
1488
|
+
* @param permission - Permission to check
|
|
1489
|
+
* @param pageId - Optional page ID
|
|
1490
|
+
* @param useCache - Whether to use cached results
|
|
1491
|
+
* @param appName - Optional app name (for PORTAL/ADMIN special case)
|
|
1492
|
+
* @returns Permission check state and methods
|
|
1462
1493
|
*
|
|
1463
1494
|
* @example
|
|
1464
1495
|
* ```tsx
|
|
1465
1496
|
* function MyComponent() {
|
|
1466
|
-
* const {
|
|
1497
|
+
* const { can, isLoading, error } = useCan(userId, scope, 'read:users');
|
|
1467
1498
|
*
|
|
1468
|
-
* if (isLoading) return <div>
|
|
1499
|
+
* if (isLoading) return <div>Checking permission...</div>;
|
|
1469
1500
|
* if (error) return <div>Error: {error.message}</div>;
|
|
1470
1501
|
*
|
|
1471
|
-
* return
|
|
1472
|
-
* <div>
|
|
1473
|
-
* Access Level: {accessLevel}
|
|
1474
|
-
* {accessLevel >= AccessLevel.ADMIN && <AdminPanel />}
|
|
1475
|
-
* </div>
|
|
1476
|
-
* );
|
|
1502
|
+
* return can ? <UserList /> : <div>Access denied</div>;
|
|
1477
1503
|
* }
|
|
1478
1504
|
* ```
|
|
1479
1505
|
*/
|
|
1480
|
-
declare function
|
|
1481
|
-
|
|
1506
|
+
declare function useCan(userId: UUID, scope: Scope, permission: Permission, pageId?: UUID, useCache?: boolean,
|
|
1507
|
+
/**
|
|
1508
|
+
* Pre-computed super admin flag to avoid duplicate super admin checks.
|
|
1509
|
+
* Callers should check super admin once and pass the result to all useCan hooks.
|
|
1510
|
+
* Pass null if not checked yet, false/true if checked.
|
|
1511
|
+
* Defaults to null (not checked yet) - hook will check if needed.
|
|
1512
|
+
*/
|
|
1513
|
+
precomputedSuperAdmin?: boolean | null, appName?: string): {
|
|
1514
|
+
can: boolean;
|
|
1482
1515
|
isLoading: boolean;
|
|
1483
1516
|
error: Error | null;
|
|
1484
1517
|
refetch: () => Promise<void>;
|
|
1485
1518
|
};
|
|
1519
|
+
|
|
1486
1520
|
/**
|
|
1487
|
-
* Hook to check
|
|
1521
|
+
* Hook to check if user has all of the specified permissions
|
|
1488
1522
|
*
|
|
1489
1523
|
* @param userId - User ID
|
|
1490
1524
|
* @param scope - Scope for permission checking
|
|
1491
1525
|
* @param permissions - Array of permissions to check
|
|
1492
1526
|
* @param useCache - Whether to use cached results
|
|
1493
|
-
* @returns
|
|
1527
|
+
* @returns Whether user has all of the permissions
|
|
1494
1528
|
*
|
|
1495
1529
|
* @example
|
|
1496
1530
|
* ```tsx
|
|
1497
1531
|
* function MyComponent() {
|
|
1498
|
-
* const {
|
|
1532
|
+
* const { hasAll, isLoading, error } = useHasAllPermissions(
|
|
1499
1533
|
* userId,
|
|
1500
1534
|
* scope,
|
|
1501
1535
|
* ['read:users', 'create:users', 'update:users']
|
|
@@ -1504,22 +1538,17 @@ declare function useAccessLevel(userId: UUID, scope: Scope): {
|
|
|
1504
1538
|
* if (isLoading) return <div>Checking permissions...</div>;
|
|
1505
1539
|
* if (error) return <div>Error: {error.message}</div>;
|
|
1506
1540
|
*
|
|
1507
|
-
* return
|
|
1508
|
-
* <div>
|
|
1509
|
-
* {results['read:users'] && <UserList />}
|
|
1510
|
-
* {results['create:users'] && <CreateUserButton />}
|
|
1511
|
-
* {results['update:users'] && <EditUserButton />}
|
|
1512
|
-
* </div>
|
|
1513
|
-
* );
|
|
1541
|
+
* return hasAll ? <FullUserManagementPanel /> : <div>Insufficient permissions</div>;
|
|
1514
1542
|
* }
|
|
1515
1543
|
* ```
|
|
1516
1544
|
*/
|
|
1517
|
-
declare function
|
|
1518
|
-
|
|
1545
|
+
declare function useHasAllPermissions(userId: UUID, scope: Scope, permissions: Permission[], useCache?: boolean): {
|
|
1546
|
+
hasAll: boolean;
|
|
1519
1547
|
isLoading: boolean;
|
|
1520
1548
|
error: Error | null;
|
|
1521
1549
|
refetch: () => Promise<void>;
|
|
1522
1550
|
};
|
|
1551
|
+
|
|
1523
1552
|
/**
|
|
1524
1553
|
* Hook to check if user has any of the specified permissions
|
|
1525
1554
|
*
|
|
@@ -1551,19 +1580,20 @@ declare function useHasAnyPermission(userId: UUID, scope: Scope, permissions: Pe
|
|
|
1551
1580
|
error: Error | null;
|
|
1552
1581
|
refetch: () => Promise<void>;
|
|
1553
1582
|
};
|
|
1583
|
+
|
|
1554
1584
|
/**
|
|
1555
|
-
* Hook to check
|
|
1585
|
+
* Hook to check multiple permissions at once
|
|
1556
1586
|
*
|
|
1557
1587
|
* @param userId - User ID
|
|
1558
1588
|
* @param scope - Scope for permission checking
|
|
1559
1589
|
* @param permissions - Array of permissions to check
|
|
1560
1590
|
* @param useCache - Whether to use cached results
|
|
1561
|
-
* @returns
|
|
1591
|
+
* @returns Multiple permission check results
|
|
1562
1592
|
*
|
|
1563
1593
|
* @example
|
|
1564
1594
|
* ```tsx
|
|
1565
1595
|
* function MyComponent() {
|
|
1566
|
-
* const {
|
|
1596
|
+
* const { results, isLoading, error } = useMultiplePermissions(
|
|
1567
1597
|
* userId,
|
|
1568
1598
|
* scope,
|
|
1569
1599
|
* ['read:users', 'create:users', 'update:users']
|
|
@@ -1572,45 +1602,61 @@ declare function useHasAnyPermission(userId: UUID, scope: Scope, permissions: Pe
|
|
|
1572
1602
|
* if (isLoading) return <div>Checking permissions...</div>;
|
|
1573
1603
|
* if (error) return <div>Error: {error.message}</div>;
|
|
1574
1604
|
*
|
|
1575
|
-
* return
|
|
1605
|
+
* return (
|
|
1606
|
+
* <div>
|
|
1607
|
+
* {results['read:users'] && <UserList />}
|
|
1608
|
+
* {results['create:users'] && <CreateUserButton />}
|
|
1609
|
+
* {results['update:users'] && <EditUserButton />}
|
|
1610
|
+
* </div>
|
|
1611
|
+
* );
|
|
1576
1612
|
* }
|
|
1577
1613
|
* ```
|
|
1578
1614
|
*/
|
|
1579
|
-
declare function
|
|
1580
|
-
|
|
1615
|
+
declare function useMultiplePermissions(userId: UUID, scope: Scope, permissions: Permission[], useCache?: boolean): {
|
|
1616
|
+
results: Record<Permission, boolean>;
|
|
1581
1617
|
isLoading: boolean;
|
|
1582
1618
|
error: Error | null;
|
|
1583
1619
|
refetch: () => Promise<void>;
|
|
1584
1620
|
};
|
|
1621
|
+
|
|
1585
1622
|
/**
|
|
1586
|
-
* Hook to get
|
|
1623
|
+
* Hook to get user's permissions in a scope
|
|
1587
1624
|
*
|
|
1588
1625
|
* @param userId - User ID
|
|
1589
|
-
* @param
|
|
1590
|
-
* @
|
|
1626
|
+
* @param organisationId - Organisation ID
|
|
1627
|
+
* @param eventId - Event ID (optional)
|
|
1628
|
+
* @param appId - Application ID (optional)
|
|
1629
|
+
* @returns Permission state and methods
|
|
1591
1630
|
*
|
|
1592
1631
|
* @example
|
|
1593
1632
|
* ```tsx
|
|
1594
1633
|
* function MyComponent() {
|
|
1595
|
-
* const { permissions, isLoading, error
|
|
1634
|
+
* const { permissions, isLoading, error } = usePermissions(
|
|
1635
|
+
* userId,
|
|
1636
|
+
* organisationId,
|
|
1637
|
+
* eventId,
|
|
1638
|
+
* appId
|
|
1639
|
+
* );
|
|
1596
1640
|
*
|
|
1597
|
-
* if (isLoading) return <div>Loading
|
|
1641
|
+
* if (isLoading) return <div>Loading...</div>;
|
|
1598
1642
|
* if (error) return <div>Error: {error.message}</div>;
|
|
1599
1643
|
*
|
|
1600
1644
|
* return (
|
|
1601
1645
|
* <div>
|
|
1602
1646
|
* {permissions['read:users'] && <UserList />}
|
|
1603
|
-
* <
|
|
1647
|
+
* {permissions['create:users'] && <CreateUserButton />}
|
|
1604
1648
|
* </div>
|
|
1605
1649
|
* );
|
|
1606
1650
|
* }
|
|
1607
1651
|
* ```
|
|
1608
1652
|
*/
|
|
1609
|
-
declare function
|
|
1653
|
+
declare function usePermissions(userId: UUID, organisationId: string | undefined, eventId: string | undefined, appId: string | undefined): {
|
|
1610
1654
|
permissions: PermissionMap;
|
|
1611
1655
|
isLoading: boolean;
|
|
1612
1656
|
error: Error | null;
|
|
1613
|
-
|
|
1657
|
+
hasPermission: (permission: Permission) => boolean;
|
|
1658
|
+
hasAnyPermission: (permissionList: Permission[]) => boolean;
|
|
1659
|
+
hasAllPermissions: (permissionList: Permission[]) => boolean;
|
|
1614
1660
|
refetch: () => Promise<void>;
|
|
1615
1661
|
};
|
|
1616
1662
|
|
|
@@ -2238,7 +2284,14 @@ declare function getRoleContext(input: {
|
|
|
2238
2284
|
* });
|
|
2239
2285
|
* ```
|
|
2240
2286
|
*/
|
|
2241
|
-
declare function isPermitted(input: PermissionCheck, appConfig?: AppConfig | null, appName?: string
|
|
2287
|
+
declare function isPermitted(input: PermissionCheck, appConfig?: AppConfig | null, appName?: string,
|
|
2288
|
+
/**
|
|
2289
|
+
* Pre-computed super admin status to avoid duplicate checks.
|
|
2290
|
+
* Pass null if not checked yet (will check), true if already checked and is super admin,
|
|
2291
|
+
* or false if already checked and is not super admin.
|
|
2292
|
+
* @default null
|
|
2293
|
+
*/
|
|
2294
|
+
precomputedSuperAdmin?: boolean | null): Promise<boolean>;
|
|
2242
2295
|
/**
|
|
2243
2296
|
* Check if user has a specific permission (cached version)
|
|
2244
2297
|
*
|
|
@@ -2375,28 +2428,6 @@ declare const PAGE_PERMISSIONS: {
|
|
|
2375
2428
|
* @returns True if valid, false otherwise
|
|
2376
2429
|
*/
|
|
2377
2430
|
declare function isValidPermission(permission: string): permission is Permission;
|
|
2378
|
-
/**
|
|
2379
|
-
* Get all permissions for a role - REMOVED
|
|
2380
|
-
*
|
|
2381
|
-
* @deprecated This function has been removed to ensure RBAC compliance.
|
|
2382
|
-
* Permissions must be queried from the rbac_page_permissions database table,
|
|
2383
|
-
* not hardcoded in application code. This allows organizations to customize
|
|
2384
|
-
* their own page-level permissions as required by the RBAC specification.
|
|
2385
|
-
*
|
|
2386
|
-
* To get permissions for a role, query the database:
|
|
2387
|
-
* ```typescript
|
|
2388
|
-
* const { data } = await supabase
|
|
2389
|
-
* .from('rbac_page_permissions')
|
|
2390
|
-
* .select('operation, allowed')
|
|
2391
|
-
* .eq('role_name', roleName)
|
|
2392
|
-
* .eq('organisation_id', organisationId)
|
|
2393
|
-
* .eq('allowed', true);
|
|
2394
|
-
* ```
|
|
2395
|
-
*
|
|
2396
|
-
* @param role - Role name
|
|
2397
|
-
* @returns Empty array (function deprecated)
|
|
2398
|
-
*/
|
|
2399
|
-
declare function getPermissionsForRole(role: string): Permission[];
|
|
2400
2431
|
declare const ALL_PERMISSIONS: {
|
|
2401
2432
|
readonly READ_PAGE: Permission;
|
|
2402
2433
|
readonly CREATE_PAGE: Permission;
|
|
@@ -2609,4 +2640,4 @@ declare function getDirectSupabaseAuthFixes(): QuickFix;
|
|
|
2609
2640
|
*/
|
|
2610
2641
|
declare function getQuickFixes(issueType: string, details?: Record<string, any>): QuickFix[];
|
|
2611
2642
|
|
|
2612
|
-
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,
|
|
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 };
|
package/dist/rbac/index.js
CHANGED
|
@@ -22,7 +22,6 @@ import {
|
|
|
22
22
|
getCustomAuthCodeFixes,
|
|
23
23
|
getDirectSupabaseAuthFixes,
|
|
24
24
|
getDuplicateConfigFixes,
|
|
25
|
-
getPermissionsForRole,
|
|
26
25
|
getQuickFixes,
|
|
27
26
|
getSetupIssues,
|
|
28
27
|
getUnprotectedPageFixes,
|
|
@@ -40,7 +39,7 @@ import {
|
|
|
40
39
|
withAccessLevelGuard,
|
|
41
40
|
withPermissionGuard,
|
|
42
41
|
withRoleGuard
|
|
43
|
-
} from "../chunk-
|
|
42
|
+
} from "../chunk-6J4GEEJR.js";
|
|
44
43
|
import {
|
|
45
44
|
SecureSupabaseClient,
|
|
46
45
|
createSecureClient,
|
|
@@ -53,16 +52,14 @@ import {
|
|
|
53
52
|
useMultiplePermissions,
|
|
54
53
|
usePermissions,
|
|
55
54
|
useRBAC,
|
|
55
|
+
useResolvedScope,
|
|
56
56
|
useResourcePermissions,
|
|
57
57
|
useRoleManagement,
|
|
58
58
|
useSecureSupabase
|
|
59
|
-
} from "../chunk-
|
|
60
|
-
import "../chunk-
|
|
61
|
-
import {
|
|
62
|
-
useResolvedScope
|
|
63
|
-
} from "../chunk-IIELH4DL.js";
|
|
59
|
+
} from "../chunk-XWQCNGTQ.js";
|
|
60
|
+
import "../chunk-MMZ7JXPU.js";
|
|
64
61
|
import "../chunk-KQCRWDSA.js";
|
|
65
|
-
import "../chunk-
|
|
62
|
+
import "../chunk-EHMR7VYL.js";
|
|
66
63
|
import {
|
|
67
64
|
CACHE_PATTERNS,
|
|
68
65
|
RBACCache,
|
|
@@ -94,7 +91,7 @@ import {
|
|
|
94
91
|
resetPerformanceMetrics,
|
|
95
92
|
resolveAppContext,
|
|
96
93
|
setupRBAC
|
|
97
|
-
} from "../chunk-
|
|
94
|
+
} from "../chunk-24UVZUZG.js";
|
|
98
95
|
import {
|
|
99
96
|
RBACAuditManager,
|
|
100
97
|
createAuditManager,
|
|
@@ -103,7 +100,8 @@ import {
|
|
|
103
100
|
setGlobalAuditManager
|
|
104
101
|
} from "../chunk-63FOKYGO.js";
|
|
105
102
|
import "../chunk-QXHPKYJV.js";
|
|
106
|
-
import "../chunk-
|
|
103
|
+
import "../chunk-F2IMUDXZ.js";
|
|
104
|
+
import "../chunk-FMUCXFII.js";
|
|
107
105
|
import "../chunk-VBXEHIUJ.js";
|
|
108
106
|
import "../chunk-PWLANIRT.js";
|
|
109
107
|
import "../chunk-7D4SUZUM.js";
|
|
@@ -151,7 +149,6 @@ export {
|
|
|
151
149
|
getPerformanceMetrics,
|
|
152
150
|
getPerformanceSummary,
|
|
153
151
|
getPermissionMap,
|
|
154
|
-
getPermissionsForRole,
|
|
155
152
|
getQuickFixes,
|
|
156
153
|
getRBACConfig,
|
|
157
154
|
getRBACLogger,
|
|
@@ -10,9 +10,8 @@
|
|
|
10
10
|
/**
|
|
11
11
|
* Parse and normalize event_colours to PaletteData
|
|
12
12
|
*
|
|
13
|
-
* Supports
|
|
13
|
+
* Supports input formats:
|
|
14
14
|
* - Object with 'main', 'sec', 'acc' keys
|
|
15
|
-
* - Object with 'ev-main', 'ev-sec', 'ev-acc' keys (legacy)
|
|
16
15
|
* - JSON string that will be parsed
|
|
17
16
|
*
|
|
18
17
|
* Only includes explicitly defined color values. Does not fill
|
|
@@ -34,17 +33,6 @@
|
|
|
34
33
|
* // Returns: { main: { 500: {...}, raw: {...} }, sec: { 500: {...} }, acc: { 500: {...} } }
|
|
35
34
|
* ```
|
|
36
35
|
*
|
|
37
|
-
* @example
|
|
38
|
-
* ```ts
|
|
39
|
-
* // Legacy format with ev-* keys
|
|
40
|
-
* const colours = {
|
|
41
|
-
* "ev-main": { 500: { L: 0.5, C: 0.2, H: 0 } },
|
|
42
|
-
* "ev-sec": { 500: { L: 0.5, C: 0.2, H: 120 } },
|
|
43
|
-
* "ev-acc": { 500: { L: 0.5, C: 0.2, H: 240 } }
|
|
44
|
-
* };
|
|
45
|
-
* const palette = parseAndNormalizeEventColours(colours);
|
|
46
|
-
* // Returns normalized palette with only defined shades included
|
|
47
|
-
* ```
|
|
48
36
|
*/
|
|
49
37
|
declare function parseAndNormalizeEventColours(input: unknown): {
|
|
50
38
|
main: any;
|
package/dist/theming/runtime.js
CHANGED
|
@@ -267,16 +267,9 @@ declare function formatNumber(value: number, options?: Intl.NumberFormatOptions,
|
|
|
267
267
|
/**
|
|
268
268
|
* Format a number as a percentage.
|
|
269
269
|
*
|
|
270
|
-
* The third parameter can be either:
|
|
271
|
-
* - A number for fixed decimal places (backward compatible): `formatPercent(0.81, 'en-US', 2)`
|
|
272
|
-
* - An options object with:
|
|
273
|
-
* - `decimals`: Fixed number of decimal places (default: 1)
|
|
274
|
-
* - `preserveDecimals`: Auto-detect and preserve decimal places from the input value
|
|
275
|
-
* - `maxDecimals`: Maximum decimal places when preserving (default: 10)
|
|
276
|
-
*
|
|
277
270
|
* @param value - The percentage value as a decimal (e.g., 0.81 for 0.81%)
|
|
278
271
|
* @param locale - The locale string (default: 'en-US')
|
|
279
|
-
* @param
|
|
272
|
+
* @param options - Options object with:
|
|
280
273
|
* - `decimals` - Fixed number of decimal places (default: 1)
|
|
281
274
|
* - `preserveDecimals` - Auto-detect and preserve decimal places from the input value
|
|
282
275
|
* - `maxDecimals` - Maximum decimal places when preserving (default: 10)
|
|
@@ -286,14 +279,14 @@ declare function formatNumber(value: number, options?: Intl.NumberFormatOptions,
|
|
|
286
279
|
* ```ts
|
|
287
280
|
* // Fixed decimals (default behavior)
|
|
288
281
|
* formatPercent(0.5) // '0.5%'
|
|
289
|
-
* formatPercent(0.81, 'en-US', 1) // '0.8%' (loses precision)
|
|
282
|
+
* formatPercent(0.81, 'en-US', { decimals: 1 }) // '0.8%' (loses precision)
|
|
290
283
|
*
|
|
291
284
|
* // Preserve decimal places dynamically
|
|
292
285
|
* formatPercent(0.81, 'en-US', { preserveDecimals: true }) // '0.81%'
|
|
293
286
|
* formatPercent(0.8123, 'en-US', { preserveDecimals: true, maxDecimals: 2 }) // '0.81%'
|
|
294
287
|
* ```
|
|
295
288
|
*/
|
|
296
|
-
declare function formatPercent(value: number, locale?: string,
|
|
289
|
+
declare function formatPercent(value: number, locale?: string, options?: {
|
|
297
290
|
decimals?: number;
|
|
298
291
|
preserveDecimals?: boolean;
|
|
299
292
|
maxDecimals?: number;
|
|
@@ -14,11 +14,19 @@ type UUID = string;
|
|
|
14
14
|
type Operation = 'read' | 'create' | 'update' | 'delete';
|
|
15
15
|
type Permission = `${Operation}:${string}`;
|
|
16
16
|
type AccessLevel = 'viewer' | 'participant' | 'planner' | 'admin' | 'super';
|
|
17
|
+
/**
|
|
18
|
+
* Scope defines the context for permission checks.
|
|
19
|
+
* Can include organisation, event, and/or app identifiers.
|
|
20
|
+
*/
|
|
17
21
|
type Scope = {
|
|
18
22
|
organisationId?: UUID;
|
|
19
23
|
eventId?: string;
|
|
20
24
|
appId?: AppId | UUID;
|
|
21
25
|
};
|
|
26
|
+
/**
|
|
27
|
+
* Permission check request parameters.
|
|
28
|
+
* Defines who (userId) is checking what permission in what context (scope).
|
|
29
|
+
*/
|
|
22
30
|
type PermissionCheck = {
|
|
23
31
|
userId: UUID;
|
|
24
32
|
scope: Scope;
|