@jmruthers/pace-core 0.6.9 → 0.6.11
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 +21 -0
- package/audit-tool/00-dependencies.cjs +46 -13
- package/audit-tool/audits/01-pace-core-compliance.cjs +96 -21
- package/audit-tool/audits/02-project-structure.cjs +74 -2
- package/audit-tool/audits/03-architecture.cjs +220 -20
- package/audit-tool/audits/04-code-quality.cjs +95 -3
- package/audit-tool/audits/05-styling.cjs +19 -7
- package/audit-tool/audits/06-security-rbac.cjs +214 -25
- package/audit-tool/audits/07-api-tech-stack.cjs +31 -15
- package/audit-tool/audits/08-testing-documentation.cjs +11 -3
- package/audit-tool/audits/09-operations.cjs +19 -7
- package/audit-tool/index.cjs +22 -11
- package/audit-tool/utils/report-utils.cjs +4 -0
- package/cursor-rules/01-pace-core-compliance.mdc +1 -0
- package/cursor-rules/02-project-structure.mdc +3 -26
- package/cursor-rules/03-architecture.mdc +3 -1
- package/cursor-rules/04-code-quality.mdc +1 -0
- package/cursor-rules/05-styling.mdc +120 -8
- package/cursor-rules/06-security-rbac.mdc +126 -2
- package/cursor-rules/07-api-tech-stack.mdc +1 -0
- package/cursor-rules/08-testing-documentation.mdc +1 -0
- package/cursor-rules/09-operations.mdc +1 -0
- package/dist/DataTable-EFYP2QLE.js +16 -0
- package/dist/InactivityServiceProvider-BbxwwDz1.d.ts +308 -0
- package/dist/UnifiedAuthProvider-Bkt_tzdS.d.ts +183 -0
- package/dist/api-BZR2CYXL.js +5 -0
- package/dist/api-result-USV1Czr-.d.ts +51 -0
- package/dist/assets/app-icons/admin_favicon.svg +462 -0
- package/dist/assets/app-icons/base_favicon.svg +85 -0
- package/dist/assets/app-icons/cake_favicon.svg +68 -0
- package/dist/assets/app-icons/core_favicon.svg +256 -0
- package/dist/assets/app-icons/gear_favicon.svg +91 -0
- package/dist/assets/app-icons/medi_favicon.svg +92 -0
- package/dist/assets/app-icons/mint_favicon.svg +83 -0
- package/dist/assets/app-icons/pace_favicon.svg +49 -0
- package/dist/assets/app-icons/pump_favicon.svg +68 -0
- package/dist/assets/app-icons/seed_favicon.svg +91 -0
- package/dist/assets/app-icons/team_favicon.svg +67 -0
- package/dist/assets/app-icons/trac_favicon.svg +112 -0
- package/dist/assets/app-icons/trip_favicon.svg +102 -0
- package/dist/audit-HI2DHUVU.js +4 -0
- package/dist/auth-JvdRVaud.d.ts +49 -0
- package/dist/chunk-2DL2WSOE.js +327 -0
- package/dist/chunk-2OEVOGGR.js +9598 -0
- package/dist/chunk-44CNXN4P.js +15 -0
- package/dist/chunk-4R3T5ENU.js +2943 -0
- package/dist/chunk-7A6IMHH2.js +2321 -0
- package/dist/chunk-BTHN5MKC.js +121 -0
- package/dist/chunk-CU2BU2MQ.js +2 -0
- package/dist/chunk-D6BMFMQZ.js +200 -0
- package/dist/chunk-DDMPHZ3D.js +58 -0
- package/dist/chunk-ENLXB7GP.js +721 -0
- package/dist/chunk-J2KQK6DG.js +2159 -0
- package/dist/chunk-KJXRL3XE.js +6434 -0
- package/dist/chunk-L5LFKKLJ.js +61 -0
- package/dist/chunk-PCSHBLPB.js +811 -0
- package/dist/chunk-QRYSEPHB.js +429 -0
- package/dist/chunk-RMLY6KB5.js +187 -0
- package/dist/chunk-SACF5YSM.js +31 -0
- package/dist/chunk-UZNAFKGW.js +125 -0
- package/dist/chunk-V7FTM2LU.js +1080 -0
- package/dist/chunk-WY6Y7KC3.js +264 -0
- package/dist/chunk-XOJME5T7.js +407 -0
- package/dist/chunk-XPFVT3GN.js +492 -0
- package/dist/chunk-YFTFFJIV.js +529 -0
- package/dist/chunk-YYTWKVHO.js +1334 -0
- package/dist/components.d.ts +12 -89
- package/dist/components.js +23 -55
- package/dist/database.generated-qkdoiVrJ.d.ts +9441 -0
- package/dist/eslint-rules/index.cjs +3 -0
- package/dist/eslint-rules/rules/03-architecture.cjs +74 -0
- package/dist/eslint-rules/rules/05-styling.cjs +507 -0
- package/dist/eslint-rules/rules/06-security-rbac.cjs +84 -0
- package/dist/event-BfCox3N2.d.ts +265 -0
- package/dist/file-reference-DU1hcawx.d.ts +164 -0
- package/dist/functions-DH45k8ec.d.ts +208 -0
- package/dist/hooks.d.ts +28 -14
- package/dist/hooks.js +90 -56
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.js +1 -0
- package/dist/index.d.ts +392 -155
- package/dist/index.js +337 -347
- package/dist/pagination-BW1mqywp.d.ts +201 -0
- package/dist/papaparseLoader-WG2UXQ22.js +7 -0
- package/dist/providers.d.ts +29 -14
- package/dist/providers.js +7 -5
- package/dist/rbac/eslint-rules.js +2 -2
- package/dist/rbac/index.d.ts +180 -351
- package/dist/rbac/index.js +13 -11
- package/dist/theming/runtime.d.ts +28 -5
- package/dist/theming/runtime.js +2 -2
- package/dist/timezone-BTWWXKVY.d.ts +696 -0
- package/dist/types-BE2sEHKd.d.ts +55 -0
- package/dist/types-CvOPXWWZ.d.ts +111 -0
- package/dist/types-Dr8sNhER.d.ts +50 -0
- package/dist/types.d.ts +20 -13
- package/dist/types.js +1 -0
- package/dist/usePublicPageContext-B91dGYW1.d.ts +4367 -0
- package/dist/usePublicRouteParams-BgV6VhMi.d.ts +946 -0
- package/dist/utils.d.ts +338 -156
- package/dist/utils.js +78 -60
- package/dist/validation-g5n0hDkh.d.ts +177 -0
- package/docs/api/modules.md +1226 -1094
- package/docs/api-reference/components.md +5 -5
- package/docs/api-reference/rpc-functions.md +12 -3
- package/docs/core-concepts/rbac-system.md +8 -0
- package/docs/getting-started/cursor-rules.md +17 -20
- package/docs/getting-started/dependencies.md +1 -1
- package/docs/getting-started/setup.md +235 -0
- package/docs/implementation-guides/authentication.md +27 -0
- package/docs/implementation-guides/data-tables.md +365 -10
- package/docs/migration/ApiResult-migration.md +25 -0
- package/docs/rbac/RBAC_CONTRACT.md +0 -12
- package/docs/rbac/api-reference.md +33 -31
- package/docs/standards/0-standards-overview.md +50 -15
- package/docs/standards/1-pace-core-compliance-standards.md +62 -57
- package/docs/standards/2-project-structure-standards.md +45 -90
- package/docs/standards/3-architecture-standards.md +41 -1
- package/docs/standards/4-code-quality-standards.md +26 -6
- package/docs/standards/5-styling-standards.md +35 -1
- package/docs/standards/6-security-rbac-standards.md +288 -7
- package/docs/standards/7-api-tech-stack-standards.md +116 -17
- package/docs/standards/8-testing-documentation-standards.md +31 -0
- package/docs/standards/9-operations-standards.md +19 -0
- package/docs/standards/README.md +20 -201
- package/docs/testing/README.md +10 -0
- package/docs/testing/test-setup-for-consumers.md +916 -0
- package/docs/troubleshooting/common-issues.md +17 -1
- package/docs/troubleshooting/organisation-context-setup.md +8 -0
- package/docs/troubleshooting/print-event-name-css-variable-analysis.md +217 -0
- package/eslint-config-pace-core.cjs +24 -0
- package/package.json +14 -20
- package/scripts/build-docs.js +180 -0
- package/scripts/setup.cjs +536 -0
- package/scripts/validate.cjs +480 -0
- package/src/__mocks__/lucide-react.ts +0 -2
- package/src/__tests__/helpers/component-test-utils.test.tsx +260 -0
- package/src/__tests__/helpers/optimized-test-setup.test.ts +224 -0
- package/src/__tests__/helpers/supabaseMock.test.ts +273 -0
- package/src/__tests__/helpers/test-providers.test.tsx +99 -0
- package/src/__tests__/helpers/test-providers.tsx +37 -39
- package/src/__tests__/helpers/test-utils.test.tsx +447 -0
- package/src/__tests__/helpers/timer-utils.test.ts +371 -0
- package/src/assets/app-icons/admin_favicon.svg +462 -0
- package/src/assets/app-icons/base_favicon.svg +85 -0
- package/src/assets/app-icons/cake_favicon.svg +68 -0
- package/src/assets/app-icons/core_favicon.svg +256 -0
- package/src/assets/app-icons/gear_favicon.svg +91 -0
- package/src/assets/app-icons/index.test.ts +304 -0
- package/src/assets/app-icons/index.ts +83 -0
- package/src/assets/app-icons/medi_favicon.svg +92 -0
- package/src/assets/app-icons/mint_favicon.svg +83 -0
- package/src/assets/app-icons/pace_favicon.svg +49 -0
- package/src/assets/app-icons/pump_favicon.svg +68 -0
- package/src/assets/app-icons/seed_favicon.svg +91 -0
- package/src/assets/app-icons/team_favicon.svg +67 -0
- package/src/assets/app-icons/trac_favicon.svg +112 -0
- package/src/assets/app-icons/trip_favicon.svg +102 -0
- package/src/components/AddressField/AddressField.test.tsx +379 -4
- package/src/components/AddressField/AddressField.tsx +239 -213
- package/src/components/AddressField/types.ts +2 -2
- package/src/components/Alert/Alert.test.tsx +35 -25
- package/src/components/Alert/Alert.tsx +8 -8
- package/src/components/AppSwitcher/AppSwitcher.test.tsx +1250 -0
- package/src/components/AppSwitcher/AppSwitcher.tsx +315 -0
- package/src/components/Avatar/Avatar.test.tsx +11 -1
- package/src/components/Avatar/Avatar.tsx +3 -2
- package/src/components/Badge/Badge.test.tsx +11 -1
- package/src/components/Button/Button.test.tsx +13 -3
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/Calendar/Calendar.test.tsx +523 -131
- package/src/components/Calendar/Calendar.tsx +107 -488
- package/src/components/Card/Card.test.tsx +384 -258
- package/src/components/Card/Card.tsx +19 -10
- package/src/components/Checkbox/Checkbox.test.tsx +58 -174
- package/src/components/ContextSelector/ContextSelector.internals.tsx +204 -0
- package/src/components/ContextSelector/ContextSelector.test.tsx +360 -0
- package/src/components/ContextSelector/ContextSelector.tsx +66 -280
- package/src/components/ContextSelector/ContextSelector.types.ts +35 -0
- package/src/components/ContextSelector/useContextSelectorState.tsx +195 -0
- package/src/components/DataTable/AUDIT_REPORT.md +59 -44
- package/src/components/DataTable/DataTable.comprehensive.test.tsx +759 -0
- package/src/components/DataTable/DataTable.default-state.test.tsx +524 -0
- package/src/components/DataTable/DataTable.export.test.tsx +705 -0
- package/src/components/DataTable/DataTable.grouping-aggregation.test.tsx +658 -0
- package/src/components/DataTable/DataTable.hooks.test.tsx +192 -0
- package/src/components/DataTable/DataTable.select-label-display.test.tsx +485 -0
- package/src/components/DataTable/DataTable.test.tsx +787 -416
- package/src/components/DataTable/DataTable.tsx +14 -14
- package/src/components/DataTable/DataTableCore.integration.test.tsx +458 -0
- package/src/components/DataTable/DataTableCore.test-setup.ts +221 -0
- package/src/components/DataTable/DataTableCore.test.tsx +970 -0
- package/src/components/DataTable/README.md +155 -0
- package/src/components/DataTable/TESTING.md +101 -0
- package/src/components/DataTable/a11y.basic.test.tsx +788 -0
- package/src/components/DataTable/components/DataTableCore.tsx +126 -894
- package/src/components/DataTable/components/GroupingDropdown.test.tsx +621 -0
- package/src/components/DataTable/components/GroupingDropdown.tsx +2 -3
- package/src/components/DataTable/components/ImportModal.tsx +82 -408
- package/src/components/DataTable/components/ImportModalFileSection.tsx +148 -0
- package/src/components/DataTable/context/DataTableContext.test.tsx +328 -0
- package/src/components/DataTable/context/DataTableContext.tsx +13 -13
- package/src/components/DataTable/core/ColumnFactory.test.ts +403 -0
- package/src/components/DataTable/core/ColumnFactory.ts +3 -3
- package/src/components/DataTable/hooks/useColumnOrderPersistence.test.ts +516 -0
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +12 -9
- package/src/components/DataTable/hooks/useColumnVisibilityPersistence.test.ts +256 -0
- package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +12 -9
- package/src/components/DataTable/hooks/useDataTableConfiguration.test.ts +297 -0
- package/src/components/DataTable/hooks/useDataTableConfiguration.ts +15 -3
- package/src/components/DataTable/hooks/useDataTableDataPipeline.test.ts +270 -0
- package/src/components/DataTable/hooks/useDataTableDeletionBatching.test.ts +127 -0
- package/src/components/DataTable/hooks/useDataTableDeletionBatching.ts +106 -0
- package/src/components/DataTable/hooks/useDataTableEffectiveActions.test.ts +461 -0
- package/src/components/DataTable/hooks/useDataTableEffectiveActions.ts +238 -0
- package/src/components/DataTable/hooks/useDataTableLayoutHandlers.test.ts +296 -0
- package/src/components/DataTable/hooks/useDataTableLayoutHandlers.ts +175 -0
- package/src/components/DataTable/hooks/useDataTablePaginationSync.test.ts +203 -0
- package/src/components/DataTable/hooks/useDataTablePaginationSync.ts +109 -0
- package/src/components/DataTable/hooks/useDataTablePermissions.test.ts +280 -0
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +81 -260
- package/src/components/DataTable/hooks/useDataTablePipeline.test.tsx +219 -0
- package/src/components/DataTable/hooks/useDataTablePipeline.tsx +239 -0
- package/src/components/DataTable/hooks/useDataTableRenderGuard.test.tsx +316 -0
- package/src/components/DataTable/hooks/useDataTableRenderGuard.tsx +195 -0
- package/src/components/DataTable/hooks/useDataTableScope.test.ts +110 -0
- package/src/components/DataTable/hooks/useDataTableScope.ts +123 -0
- package/src/components/DataTable/hooks/useDataTableState.test.ts +733 -0
- package/src/components/DataTable/hooks/useDataTableState.ts +161 -114
- package/src/components/DataTable/hooks/useDataTableStateAndPersistence.test.ts +277 -0
- package/src/components/DataTable/hooks/useDataTableStateAndPersistence.ts +222 -0
- package/src/components/DataTable/hooks/useDataTableSuperAdmin.test.ts +93 -0
- package/src/components/DataTable/hooks/useDataTableSuperAdmin.ts +86 -0
- package/src/components/DataTable/hooks/useDataTableTableInstance.test.ts +185 -0
- package/src/components/DataTable/hooks/useDataTableTableInstance.ts +178 -0
- package/src/components/DataTable/hooks/useEffectiveColumnOrder.test.ts +183 -0
- package/src/components/DataTable/hooks/useHierarchicalState.test.ts +294 -0
- package/src/components/DataTable/hooks/useImportModalFocus.test.ts +184 -0
- package/src/components/DataTable/hooks/useImportModalFocus.ts +53 -0
- package/src/components/DataTable/hooks/useImportModalState.test.ts +390 -0
- package/src/components/DataTable/hooks/useImportModalState.ts +345 -0
- package/src/components/DataTable/hooks/useKeyboardNavigation.test.ts +787 -0
- package/src/components/DataTable/hooks/useKeyboardNavigation.ts +311 -271
- package/src/components/DataTable/hooks/usePermissionTracking.test.ts +381 -0
- package/src/components/DataTable/hooks/usePermissionTracking.ts +122 -0
- package/src/components/DataTable/hooks/useServerSideDataEffect.test.ts +258 -0
- package/src/components/DataTable/hooks/useServerSideDataEffect.ts +27 -4
- package/src/components/DataTable/hooks/useTableColumns.test.ts +499 -0
- package/src/components/DataTable/hooks/useTableColumns.ts +15 -39
- package/src/components/DataTable/hooks/useTableHandlers.test.ts +461 -0
- package/src/components/DataTable/hooks/useTableHandlers.ts +13 -22
- package/src/components/DataTable/index.ts +28 -5
- package/src/components/DataTable/keyboard.test.tsx +734 -0
- package/src/components/DataTable/mocks/MockRBACProvider.tsx +66 -0
- package/src/components/DataTable/pagination.modes.test.tsx +728 -0
- package/src/components/DataTable/ssr.strict-mode.test.tsx +319 -0
- package/src/components/DataTable/styles.test.ts +379 -0
- package/src/components/DataTable/styles.ts +0 -1
- package/src/components/DataTable/test-utils/MockDataTableComponents.tsx +55 -0
- package/src/components/DataTable/test-utils/dataFactories.ts +103 -0
- package/src/components/DataTable/test-utils/featureConfig.ts +10 -0
- package/src/components/DataTable/test-utils/sharedTestUtils.ts +419 -0
- package/src/components/DataTable/test-utils.ts +94 -0
- package/src/components/DataTable/types/actions.ts +71 -0
- package/src/components/DataTable/types/base.ts +39 -0
- package/src/components/DataTable/types/columns.ts +125 -0
- package/src/components/DataTable/types/export.ts +32 -0
- package/src/components/DataTable/types/features.ts +81 -0
- package/src/components/DataTable/types/hierarchical.ts +44 -0
- package/src/components/DataTable/types/index.ts +43 -0
- package/src/components/DataTable/types/pagination.ts +85 -0
- package/src/components/DataTable/types/performance.ts +47 -0
- package/src/components/DataTable/types/props.ts +62 -0
- package/src/components/DataTable/types/rbac.ts +45 -0
- package/src/components/DataTable/ui/layout/DataTableCore.test.tsx +1194 -0
- package/src/components/DataTable/ui/layout/DataTableCore.tsx +345 -0
- package/src/components/DataTable/ui/layout/DataTableErrorBoundary.test.tsx +438 -0
- package/src/components/DataTable/ui/layout/DataTableErrorBoundary.tsx +225 -0
- package/src/components/DataTable/ui/layout/DataTableLayout.test.tsx +1352 -0
- package/src/components/DataTable/ui/layout/DataTableLayout.tsx +661 -0
- package/src/components/DataTable/ui/modals/BulkDeleteConfirmDialog.test.tsx +91 -0
- package/src/components/DataTable/ui/modals/BulkDeleteConfirmDialog.tsx +43 -0
- package/src/components/DataTable/ui/modals/DataTableModals.test.tsx +749 -0
- package/src/components/DataTable/ui/modals/DataTableModals.tsx +341 -0
- package/src/components/DataTable/ui/modals/ImportModal.test.tsx +1834 -0
- package/src/components/DataTable/ui/modals/ImportModal.tsx +197 -0
- package/src/components/DataTable/ui/modals/ImportModalFailedRowsSection.tsx +60 -0
- package/src/components/DataTable/ui/modals/ImportModalFileSection.tsx +148 -0
- package/src/components/DataTable/ui/modals/ImportModalPreviewSection.tsx +60 -0
- package/src/components/DataTable/ui/modals/ImportModalSummarySection.tsx +59 -0
- package/src/components/DataTable/ui/modals/importModalPersistence.ts +73 -0
- package/src/components/DataTable/ui/shared/AccessDeniedPage.test.tsx +245 -0
- package/src/components/DataTable/ui/shared/AccessDeniedPage.tsx +159 -0
- package/src/components/DataTable/ui/shared/ActionButtons.test.tsx +921 -0
- package/src/components/DataTable/ui/shared/ActionButtons.tsx +195 -0
- package/src/components/DataTable/ui/shared/ColumnFilter.test.tsx +497 -0
- package/src/components/DataTable/ui/shared/ColumnFilter.tsx +113 -0
- package/src/components/DataTable/ui/shared/PaginationControls.test.tsx +451 -0
- package/src/components/DataTable/ui/shared/PaginationControls.tsx +291 -0
- package/src/components/DataTable/ui/shared/SortIndicator.test.tsx +135 -0
- package/src/components/DataTable/ui/shared/SortIndicator.tsx +50 -0
- package/src/components/DataTable/ui/table/EditFields.test.tsx +526 -0
- package/src/components/DataTable/ui/table/EditFields.tsx +355 -0
- package/src/components/DataTable/ui/table/EditableRow.test.tsx +1003 -0
- package/src/components/DataTable/ui/table/EditableRow.tsx +444 -0
- package/src/components/DataTable/ui/table/EmptyState.test.tsx +360 -0
- package/src/components/DataTable/ui/table/EmptyState.tsx +74 -0
- package/src/components/DataTable/ui/table/FilterRow.test.tsx +416 -0
- package/src/components/DataTable/ui/table/FilterRow.tsx +148 -0
- package/src/components/DataTable/ui/table/LoadingState.test.tsx +77 -0
- package/src/components/DataTable/ui/table/LoadingState.tsx +17 -0
- package/src/components/DataTable/ui/table/RowComponent.test.tsx +1024 -0
- package/src/components/DataTable/ui/table/RowComponent.tsx +429 -0
- package/src/components/DataTable/ui/table/UnifiedTableBody.test.tsx +1273 -0
- package/src/components/DataTable/ui/table/UnifiedTableBody.tsx +440 -0
- package/src/components/DataTable/ui/table/cellValueUtils.test.ts +453 -0
- package/src/components/DataTable/ui/table/cellValueUtils.ts +40 -0
- package/src/components/DataTable/ui/toolbar/BulkOperationsDropdown.test.tsx +551 -0
- package/src/components/DataTable/ui/toolbar/BulkOperationsDropdown.tsx +160 -0
- package/src/components/DataTable/ui/toolbar/ColumnVisibilityDropdown.test.tsx +751 -0
- package/src/components/DataTable/ui/toolbar/ColumnVisibilityDropdown.tsx +114 -0
- package/src/components/DataTable/ui/toolbar/DataTableToolbar.test.tsx +629 -0
- package/src/components/DataTable/ui/toolbar/DataTableToolbar.tsx +271 -0
- package/src/components/DataTable/ui/toolbar/GroupingDropdown.test.tsx +621 -0
- package/src/components/DataTable/ui/toolbar/GroupingDropdown.tsx +107 -0
- package/src/components/DataTable/utils/a11yUtils.test.ts +548 -0
- package/src/components/DataTable/utils/a11yUtils.ts +1 -1
- package/src/components/DataTable/utils/aggregationUtils.test.ts +288 -0
- package/src/components/DataTable/utils/aggregationUtils.ts +5 -5
- package/src/components/DataTable/utils/columnUtils.test.ts +94 -0
- package/src/components/DataTable/utils/csvParse.test.ts +74 -0
- package/src/components/DataTable/utils/csvParse.ts +65 -0
- package/src/components/DataTable/utils/errorHandling.test.ts +209 -0
- package/src/components/DataTable/utils/errorHandling.ts +3 -1
- package/src/components/DataTable/utils/exportUtils.test.ts +954 -0
- package/src/components/DataTable/utils/exportUtils.ts +1 -1
- package/src/components/DataTable/utils/flexibleImport.test.ts +573 -0
- package/src/components/DataTable/utils/flexibleImport.ts +3 -186
- package/src/components/DataTable/utils/hierarchicalSorting.test.ts +235 -0
- package/src/components/DataTable/utils/hierarchicalSorting.ts +3 -3
- package/src/components/DataTable/utils/hierarchicalUtils.test.ts +586 -0
- package/src/components/DataTable/utils/importDateParser.test.ts +162 -0
- package/src/components/DataTable/utils/importDateParser.ts +114 -0
- package/src/components/DataTable/utils/importValueParser.test.ts +138 -0
- package/src/components/DataTable/utils/importValueParser.ts +91 -0
- package/src/components/DataTable/utils/paginationUtils.test.ts +593 -0
- package/src/components/DataTable/utils/paginationUtils.ts +7 -4
- package/src/components/DataTable/utils/performanceUtils.test.ts +470 -0
- package/src/components/DataTable/utils/performanceUtils.ts +1 -1
- package/src/components/DataTable/utils/rowUtils.test.ts +235 -0
- package/src/components/DataTable/utils/selectFieldUtils.test.ts +271 -0
- package/src/components/DataTable/utils/selectFieldUtils.ts +97 -67
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +18 -25
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +1 -1
- package/src/components/DateTimeField/DateTimeField.test.tsx +3 -16
- package/src/components/DateTimeField/DateTimeField.tsx +1 -1
- package/src/components/Dialog/Dialog.test-utils.ts +49 -0
- package/src/components/Dialog/Dialog.test.tsx +2865 -458
- package/src/components/Dialog/Dialog.tsx +183 -986
- package/src/components/Dialog/dialogLock.test.ts +238 -0
- package/src/components/Dialog/dialogLock.ts +98 -0
- package/src/components/Dialog/index.ts +2 -0
- package/src/components/Dialog/useDialogDimensions.test.ts +163 -0
- package/src/components/Dialog/useDialogDimensions.ts +140 -0
- package/src/components/Dialog/useDialogLifecycle.test.ts +358 -0
- package/src/components/Dialog/useDialogLifecycle.ts +135 -0
- package/src/components/Dialog/useDialogPersistence.test.ts +381 -0
- package/src/components/Dialog/useDialogPersistence.ts +357 -0
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +2 -62
- package/src/components/ErrorBoundary/ErrorBoundaryContext.context.ts +17 -0
- package/src/components/ErrorBoundary/ErrorBoundaryContext.tsx +2 -45
- package/src/components/ErrorBoundary/ErrorBoundaryContext.types.ts +41 -0
- package/src/components/ErrorBoundary/index.ts +3 -4
- package/src/components/ErrorBoundary/useErrorBoundaryContext.ts +20 -0
- package/src/components/FileDisplay/FileDisplay.test.tsx +479 -247
- package/src/components/FileDisplay/FileDisplay.tsx +29 -659
- package/src/components/FileDisplay/FileDisplayContent.test.tsx +395 -0
- package/src/components/FileDisplay/FileDisplayContent.tsx +242 -0
- package/src/components/FileDisplay/FileDisplayDeleteConfirmDialog.test.tsx +74 -0
- package/src/components/FileDisplay/FileDisplayDeleteConfirmDialog.tsx +38 -0
- package/src/components/FileDisplay/FileDisplayEmptyView.test.tsx +33 -0
- package/src/components/FileDisplay/FileDisplayEmptyView.tsx +33 -0
- package/src/components/FileDisplay/FileDisplayErrorView.test.tsx +71 -0
- package/src/components/FileDisplay/FileDisplayErrorView.tsx +50 -0
- package/src/components/FileDisplay/FileDisplayLoadingFallbackView.test.tsx +22 -0
- package/src/components/FileDisplay/FileDisplayLoadingFallbackView.tsx +22 -0
- package/src/components/FileDisplay/FileDisplayLoadingView.test.tsx +21 -0
- package/src/components/FileDisplay/FileDisplayLoadingView.tsx +23 -0
- package/src/components/FileDisplay/FileDisplayMultipleFilesView.test.tsx +101 -0
- package/src/components/FileDisplay/FileDisplayMultipleFilesView.tsx +109 -0
- package/src/components/FileDisplay/FileDisplaySingleDocumentLinkView.test.tsx +58 -0
- package/src/components/FileDisplay/FileDisplaySingleDocumentLinkView.tsx +48 -0
- package/src/components/FileDisplay/FileDisplaySingleFileWithActionsView.test.tsx +111 -0
- package/src/components/FileDisplay/FileDisplaySingleFileWithActionsView.tsx +270 -0
- package/src/components/FileDisplay/FileDisplaySingleImageView.test.tsx +78 -0
- package/src/components/FileDisplay/FileDisplaySingleImageView.tsx +67 -0
- package/src/components/FileDisplay/fallbackUtils.test.ts +50 -0
- package/src/components/FileDisplay/fallbackUtils.ts +44 -0
- package/src/components/FileDisplay/fetchFileDisplayData.ts +24 -0
- package/src/components/FileDisplay/fetchFileDisplayData.unit.test.ts +183 -0
- package/src/components/FileDisplay/fileDisplayUtils.test.ts +58 -0
- package/src/components/FileDisplay/fileDisplayUtils.ts +24 -0
- package/src/components/FileDisplay/index.tsx +1 -1
- package/src/components/FileDisplay/useFileDisplay.test.ts +538 -0
- package/src/components/FileDisplay/useFileDisplay.ts +515 -0
- package/src/components/FileDisplay/useFileDisplay.unit.test.ts +1438 -0
- package/src/components/FileDisplay/useFileDisplayData.ts +126 -0
- package/src/components/FileDisplay/usePublicFileDisplay.test.ts +729 -0
- package/src/components/FileDisplay/usePublicFileDisplay.ts +579 -0
- package/src/components/FileUpload/FileUpload.test.tsx +69 -27
- package/src/components/FileUpload/FileUpload.tsx +112 -527
- package/src/components/FileUpload/FileUploadDropZone.tsx +112 -0
- package/src/components/FileUpload/FileUploadProgressItem.tsx +86 -0
- package/src/components/FileUpload/FileUploadProgressList.tsx +40 -0
- package/src/components/FileUpload/index.tsx +1 -1
- package/src/components/FileUpload/useFileUploadManager.test.ts +308 -0
- package/src/components/FileUpload/useFileUploadManager.ts +454 -0
- package/src/components/FileUpload/useResolvedAppId.test.ts +102 -0
- package/src/components/FileUpload/useResolvedAppId.ts +77 -0
- package/src/components/Footer/Footer.test.tsx +15 -382
- package/src/components/Footer/Footer.tsx +8 -125
- package/src/components/Form/Form.test.tsx +425 -88
- package/src/components/Form/Form.tsx +91 -299
- package/src/components/Form/useFormPersistence.ts +257 -0
- package/src/components/Header/Header.test.tsx +653 -163
- package/src/components/Header/Header.tsx +62 -44
- package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +35 -76
- package/src/components/Input/Input.test.tsx +34 -120
- package/src/components/Input/Input.tsx +1 -1
- package/src/components/Label/Label.test.tsx +46 -45
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +8 -11
- package/src/components/LoginForm/LoginForm.test.tsx +0 -1
- package/src/components/NavigationMenu/HierarchicalNavItem.tsx +104 -0
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +2422 -102
- package/src/components/NavigationMenu/NavigationMenu.tsx +62 -362
- package/src/components/NavigationMenu/index.ts +6 -1
- package/src/components/NavigationMenu/navigationPermissionHelper.ts +188 -0
- package/src/components/NavigationMenu/useNavigationFiltering.test.ts +1949 -0
- package/src/components/NavigationMenu/useNavigationFiltering.ts +199 -308
- package/src/components/NavigationMenu/useNavigationScope.ts +125 -0
- package/src/components/PaceAppLayout/PaceAppLayout.edge-cases.test.tsx +1322 -0
- package/src/components/PaceAppLayout/PaceAppLayout.integration.test.tsx +50 -49
- package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +81 -38
- package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +103 -85
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +774 -44
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +282 -764
- package/src/components/PaceAppLayout/README.md +0 -9
- package/src/components/PaceAppLayout/test-setup.tsx +15 -9
- package/src/components/PaceAppLayout/useFilteredNavItems.ts +304 -0
- package/src/components/PaceAppLayout/usePaceAppLayoutConfig.ts +142 -0
- package/src/components/PaceAppLayout/usePaceAppLayoutGate.tsx +150 -0
- package/src/components/PaceAppLayout/usePaceAppLayoutPermissions.ts +162 -0
- package/src/components/PaceAppLayout/usePaceAppLayoutScope.ts +79 -0
- package/src/components/PaceAppLayout/useRoleBasedRouteAccess.ts +157 -0
- package/src/components/PaceAppLayout/useSuperAdminFallback.ts +58 -0
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +782 -20
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +33 -125
- package/src/components/PaceLoginPage/useLoginAppAccess.ts +153 -0
- package/src/components/PasswordChange/PasswordChangeForm.test.tsx +1 -1
- package/src/components/Progress/Progress.test.tsx +127 -1
- package/src/components/Progress/Progress.tsx +1 -2
- package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +1196 -4
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +29 -217
- package/src/components/ProtectedRoute/useProtectedRouteState.ts +128 -0
- package/src/components/ProtectedRoute/useVisibilityRedirectGrace.ts +89 -0
- package/src/components/PublicLayout/PublicLayout.test.tsx +1640 -38
- package/src/components/PublicLayout/PublicPageContext.ts +28 -0
- package/src/components/PublicLayout/PublicPageLayout.tsx +134 -75
- package/src/components/PublicLayout/PublicPageProvider.tsx +7 -42
- package/src/components/PublicLayout/usePublicPageContext.ts +36 -0
- package/src/components/Select/Select.test.tsx +45 -8
- package/src/components/Select/Select.tsx +57 -40
- package/src/components/Select/context.test.tsx +56 -0
- package/src/components/Select/text.test.tsx +104 -0
- package/src/components/Select/text.ts +26 -0
- package/src/components/Select/types.ts +3 -0
- package/src/components/Select/useSelectEvents.test.ts +279 -0
- package/src/components/Select/useSelectEvents.ts +87 -0
- package/src/components/Select/useSelectSearch.test.tsx +295 -0
- package/src/components/Select/useSelectSearch.ts +91 -0
- package/src/components/Select/useSelectState.test.ts +268 -0
- package/src/components/Select/useSelectState.ts +104 -0
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.test.tsx +28 -112
- package/src/components/Switch/Switch.test.tsx +57 -153
- package/src/components/Table/Table.test.tsx +395 -317
- package/src/components/Tabs/Tabs.test.tsx +270 -0
- package/src/components/Tabs/Tabs.tsx +4 -4
- package/src/components/Textarea/Textarea.test.tsx +11 -38
- package/src/components/Toast/Toast.test.tsx +425 -496
- package/src/components/Tooltip/Tooltip.test.tsx +4 -21
- package/src/components/UserMenu/UserMenu.test.tsx +1 -21
- package/src/components/UserMenu/UserMenu.tsx +0 -1
- package/src/components/index.test.ts +346 -0
- package/src/components/index.ts +12 -1
- package/src/constants/performance.test.ts +91 -0
- package/src/hooks/ServiceHooks.test.tsx +725 -0
- package/src/hooks/hooks.integration.test.tsx +608 -0
- package/src/hooks/index.ts +18 -3
- package/src/hooks/index.unit.test.ts +220 -0
- package/src/hooks/public/usePublicEvent.test.ts +304 -0
- package/src/hooks/public/usePublicEvent.ts +11 -11
- package/src/hooks/public/usePublicEventLogo.test.ts +655 -120
- package/src/hooks/public/usePublicEventLogo.ts +2 -2
- package/src/hooks/public/usePublicRouteParams.test.ts +595 -0
- package/src/hooks/public/usePublicRouteParams.ts +2 -2
- package/src/hooks/services/useAuth.ts +9 -7
- package/src/hooks/services/useAuthService.ts +1 -1
- package/src/hooks/services/useEventService.ts +1 -1
- package/src/hooks/useAccessibleApps.test.ts +400 -0
- package/src/hooks/useAccessibleApps.ts +264 -0
- package/src/hooks/useAddressAutocomplete.test.ts +170 -47
- package/src/hooks/useAddressAutocomplete.ts +109 -81
- package/src/hooks/useApiFetch.unit.test.ts +111 -0
- package/src/hooks/useAppConfig.ts +13 -3
- package/src/hooks/useAppConfig.unit.test.ts +712 -0
- package/src/hooks/useComponentPerformance.unit.test.tsx +314 -0
- package/src/hooks/useDataTablePerformance.ts +111 -130
- package/src/hooks/useDataTablePerformance.unit.test.ts +720 -0
- package/src/hooks/useDataTableState.test.ts +170 -0
- package/src/hooks/useDataTableState.ts +5 -5
- package/src/hooks/useDebounce.unit.test.ts +157 -0
- package/src/hooks/useEventTheme.test.ts +70 -18
- package/src/hooks/useEventTheme.ts +50 -22
- package/src/hooks/useEvents.ts +49 -2
- package/src/hooks/useEvents.unit.test.ts +227 -0
- package/src/hooks/useFileReference.test.ts +388 -107
- package/src/hooks/useFileReference.ts +184 -179
- package/src/hooks/useFileUrl.ts +1 -1
- package/src/hooks/useFileUrl.unit.test.ts +686 -0
- package/src/hooks/useFileUrlCache.test.ts +319 -0
- package/src/hooks/useFileUrlCache.ts +5 -2
- package/src/hooks/useFocusManagement.unit.test.ts +604 -0
- package/src/hooks/useFocusTrap.unit.test.tsx +613 -0
- package/src/hooks/useFormDialog.test.ts +307 -0
- package/src/hooks/useFormDialog.ts +2 -2
- package/src/hooks/useInactivityTracker.ts +141 -134
- package/src/hooks/useInactivityTracker.unit.test.ts +446 -0
- package/src/hooks/useIsMobile.unit.test.ts +317 -0
- package/src/hooks/useIsPrint.ts +62 -0
- package/src/hooks/useIsPrint.unit.test.ts +545 -0
- package/src/hooks/useKeyboardShortcuts.unit.test.ts +907 -0
- package/src/hooks/useOrganisationPermissions.test.ts +1 -2
- package/src/hooks/useOrganisationPermissions.ts +1 -4
- package/src/hooks/useOrganisationPermissions.unit.test.tsx +293 -0
- package/src/hooks/useOrganisationSecurity.test.ts +4 -33
- package/src/hooks/useOrganisationSecurity.ts +192 -203
- package/src/hooks/useOrganisationSecurity.unit.test.tsx +959 -0
- package/src/hooks/useOrganisations.ts +1 -1
- package/src/hooks/useOrganisations.unit.test.ts +369 -0
- package/src/hooks/usePerformanceMonitor.ts +1 -1
- package/src/hooks/usePerformanceMonitor.unit.test.ts +693 -0
- package/src/hooks/usePermissionCache.test.ts +298 -329
- package/src/hooks/usePermissionCache.ts +277 -276
- package/src/hooks/usePreventTabReload.test.ts +307 -0
- package/src/hooks/usePublicEvent.simple.test.ts +794 -0
- package/src/hooks/usePublicEvent.test.ts +670 -0
- package/src/hooks/usePublicEvent.unit.test.ts +638 -0
- package/src/hooks/usePublicFileDisplay.test.ts +948 -0
- package/src/hooks/usePublicRouteParams.unit.test.ts +442 -0
- package/src/hooks/useQueryCache.test.ts +391 -0
- package/src/hooks/useQueryCache.ts +7 -9
- package/src/hooks/useRBAC.unit.test.ts +253 -0
- package/src/hooks/useSessionDraft.test.ts +556 -0
- package/src/hooks/useSessionDraft.ts +14 -11
- package/src/hooks/useSessionRestoration.ts +1 -1
- package/src/hooks/useSessionRestoration.unit.test.tsx +381 -0
- package/src/hooks/useStorage.ts +94 -54
- package/src/hooks/useStorage.unit.test.ts +684 -0
- package/src/hooks/useToast.test.ts +413 -0
- package/src/hooks/useToast.ts +2 -2
- package/src/hooks/useToast.unit.test.tsx +481 -0
- package/src/hooks/useZodForm.ts +3 -3
- package/src/hooks/useZodForm.unit.test.tsx +191 -0
- package/src/icons/index.test.ts +133 -0
- package/src/icons/index.ts +3 -1
- package/src/index.test.ts +528 -0
- package/src/index.ts +56 -9
- package/src/providers/AuthProvider.test.tsx +218 -0
- package/src/providers/EventProvider.test.tsx +487 -0
- package/src/providers/InactivityProvider.test-helper.tsx +40 -0
- package/src/providers/InactivityProvider.test.tsx +421 -0
- package/src/providers/ProviderLifecycle.test.tsx +308 -0
- package/src/providers/UnifiedAuthProvider.smoke.test.tsx +7 -12
- package/src/providers/UnifiedAuthProvider.test.tsx +503 -0
- package/src/providers/index.test.ts +138 -0
- package/src/providers/services/AuthServiceContext.ts +27 -0
- package/src/providers/services/AuthServiceProvider.integration.test.tsx +229 -0
- package/src/providers/services/AuthServiceProvider.test.tsx +638 -0
- package/src/providers/services/AuthServiceProvider.tsx +81 -20
- package/src/providers/services/EventServiceContext.ts +25 -0
- package/src/providers/services/EventServiceProvider.test.tsx +839 -0
- package/src/providers/services/EventServiceProvider.tsx +11 -20
- package/src/providers/services/InactivityServiceContext.ts +25 -0
- package/src/providers/services/InactivityServiceProvider.test.tsx +662 -0
- package/src/providers/services/InactivityServiceProvider.tsx +7 -17
- package/src/providers/services/OrganisationServiceContext.ts +25 -0
- package/src/providers/services/OrganisationServiceProvider.test.tsx +440 -0
- package/src/providers/services/OrganisationServiceProvider.tsx +7 -17
- package/src/providers/services/UnifiedAuthContext.ts +102 -0
- package/src/providers/services/UnifiedAuthProvider.advanced.test.tsx +434 -0
- package/src/providers/services/UnifiedAuthProvider.appId.test.tsx +408 -0
- package/src/providers/services/UnifiedAuthProvider.integration.test.tsx +304 -0
- package/src/providers/services/UnifiedAuthProvider.test.tsx +212 -0
- package/src/providers/services/UnifiedAuthProvider.tsx +147 -497
- package/src/providers/services/contexts.test.tsx +281 -0
- package/src/providers/services/useUnifiedAuth.test.tsx +251 -0
- package/src/providers/services/useUnifiedAuth.ts +29 -0
- package/src/providers/services/useUnifiedAuthContextValue.ts +279 -0
- package/src/providers/useInactivity.test-helper.ts +27 -0
- package/src/rbac/README.md +5 -5
- package/src/rbac/adapters.comprehensive.test.tsx +429 -0
- package/src/rbac/adapters.test.tsx +654 -0
- package/src/rbac/adapters.tsx +53 -38
- package/src/rbac/api.test.ts +986 -259
- package/src/rbac/api.ts +260 -216
- package/src/rbac/audit-batched.test.ts +550 -0
- package/src/rbac/audit-batched.ts +5 -4
- package/src/rbac/audit.test.ts +225 -28
- package/src/rbac/audit.ts +26 -18
- package/src/rbac/auth-rbac-security.integration.test.tsx +300 -0
- package/src/rbac/auth-rbac.e2e.test.tsx +510 -0
- package/src/rbac/cache-invalidation.test.ts +715 -0
- package/src/rbac/cache-invalidation.ts +18 -15
- package/src/rbac/cache.test.ts +123 -63
- package/src/rbac/cache.ts +3 -4
- package/src/rbac/components/AccessDenied.test.tsx +324 -0
- package/src/rbac/components/AccessDenied.tsx +20 -18
- package/src/rbac/components/NavigationGuard.test.tsx +1148 -0
- package/src/rbac/components/NavigationGuard.tsx +10 -8
- package/src/rbac/components/PagePermissionGuard.guard.test.tsx +236 -0
- package/src/rbac/components/PagePermissionGuard.performance.test.tsx +252 -0
- package/src/rbac/components/PagePermissionGuard.race-condition.test.tsx +243 -0
- package/src/rbac/components/PagePermissionGuard.test.tsx +1430 -0
- package/src/rbac/components/PagePermissionGuard.tsx +188 -381
- package/src/rbac/components/PagePermissionGuard.verification.test.tsx +185 -0
- package/src/rbac/config.test.ts +131 -48
- package/src/rbac/config.ts +69 -26
- package/src/rbac/docs/event-based-apps.md +26 -13
- package/src/rbac/engine.comprehensive.test.ts +808 -0
- package/src/rbac/engine.test.ts +974 -130
- package/src/rbac/engine.ts +53 -13
- package/src/rbac/errors.test.ts +99 -87
- package/src/rbac/errors.ts +89 -55
- package/src/rbac/eslint-rules.js +2 -2
- package/src/rbac/hooks/permissions/runPermissionCheck.ts +77 -0
- package/src/rbac/hooks/permissions/useAccessLevel.test.ts +622 -0
- package/src/rbac/hooks/permissions/useAccessLevel.ts +23 -14
- package/src/rbac/hooks/permissions/useCan.test.ts +798 -0
- package/src/rbac/hooks/permissions/useCan.ts +173 -253
- package/src/rbac/hooks/permissions/useMultiplePermissions.test.ts +843 -0
- package/src/rbac/hooks/permissions/useMultiplePermissions.ts +63 -10
- package/src/rbac/hooks/permissions/usePermissions.test.ts +543 -0
- package/src/rbac/hooks/permissions/usePermissions.ts +50 -78
- package/src/rbac/hooks/useCan.test.ts +348 -32
- package/src/rbac/hooks/usePageAccessLogging.ts +160 -0
- package/src/rbac/hooks/usePageGuardScope.ts +117 -0
- package/src/rbac/hooks/usePagePermissionCheck.ts +67 -0
- package/src/rbac/hooks/usePermissions.integration.test.ts +427 -0
- package/src/rbac/hooks/usePermissions.stability.test.ts +268 -0
- package/src/rbac/hooks/usePermissions.test.ts +459 -33
- package/src/rbac/hooks/usePermissions.ts +5 -7
- package/src/rbac/hooks/useRBAC.test.ts +1784 -21
- package/src/rbac/hooks/useRBAC.ts +148 -88
- package/src/rbac/hooks/useResolvedScope.test.ts +442 -5
- package/src/rbac/hooks/useResolvedScope.ts +4 -1
- package/src/rbac/hooks/useResourcePermissions.test.ts +561 -24
- package/src/rbac/hooks/useResourcePermissions.ts +76 -140
- package/src/rbac/hooks/useResourcePermissionsSuperAdmin.ts +67 -0
- package/src/rbac/hooks/useRoleManagement.test.ts +634 -61
- package/src/rbac/hooks/useRoleManagement.ts +158 -586
- package/src/rbac/hooks/useSecureSupabase.test.ts +1179 -0
- package/src/rbac/hooks/useSecureSupabase.ts +21 -14
- package/src/rbac/hooks/useSuperAdminCheck.ts +80 -0
- package/src/rbac/index.test.ts +107 -0
- package/src/rbac/index.ts +32 -32
- package/src/rbac/performance.test.ts +451 -0
- package/src/rbac/permissions.test.ts +149 -68
- package/src/rbac/permissions.ts +0 -3
- package/src/rbac/rbac-core.test.tsx +276 -0
- package/src/rbac/rbac-engine-core-logic.test.ts +387 -0
- package/src/rbac/rbac-engine-simplified.test.ts +252 -0
- package/src/rbac/rbac-functions.test.ts +703 -0
- package/src/rbac/rbac-integration.test.ts +523 -0
- package/src/rbac/rbac-role-isolation.test.ts +456 -0
- package/src/rbac/request-deduplication.test.ts +352 -0
- package/src/rbac/request-deduplication.ts +5 -4
- package/src/rbac/scenarios.user-role.test.tsx +271 -0
- package/src/rbac/secureClient.test.ts +499 -115
- package/src/rbac/secureClient.ts +54 -28
- package/src/rbac/security.test.ts +448 -44
- package/src/rbac/security.ts +7 -6
- package/src/rbac/types/roleManagement.ts +66 -0
- package/src/rbac/types.test.ts +236 -0
- package/src/rbac/types.ts +7 -5
- package/src/rbac/utils/clientSecurity.test.ts +192 -0
- package/src/rbac/utils/clientSecurity.ts +6 -4
- package/src/rbac/utils/contextValidator.test.ts +126 -0
- package/src/rbac/utils/contextValidator.ts +6 -3
- package/src/rbac/utils/deep-equal.test.ts +76 -0
- package/src/rbac/utils/eventContext.test.ts +401 -0
- package/src/rbac/utils/eventContext.ts +38 -34
- package/src/rbac/utils/fetchPermissionMap.ts +13 -0
- package/src/rbac/utils/permissionMapHelpers.ts +34 -0
- package/src/rbac/utils/roleManagementRpc.ts +303 -0
- package/src/services/AuthService.edge-cases.test.ts +746 -0
- package/src/services/AuthService.restoreSession.test.ts +59 -0
- package/src/services/AuthService.test.ts +1362 -0
- package/src/services/AuthService.ts +197 -216
- package/src/services/BaseService.edge-cases.test.ts +506 -0
- package/src/services/BaseService.test.ts +363 -0
- package/src/services/EventService.edge-cases.test.ts +636 -0
- package/src/services/EventService.eventColours.test.ts +64 -0
- package/src/services/EventService.test.ts +1250 -0
- package/src/services/EventService.ts +244 -315
- package/src/services/InactivityService.edge-cases.test.ts +492 -0
- package/src/services/InactivityService.lifecycle.test.ts +406 -0
- package/src/services/InactivityService.test.ts +829 -0
- package/src/services/InactivityService.ts +172 -213
- package/src/services/OrganisationService.edge-cases.test.ts +633 -0
- package/src/services/OrganisationService.pagination.test.ts +409 -0
- package/src/services/OrganisationService.test.ts +1579 -0
- package/src/services/OrganisationService.ts +186 -257
- package/src/services/base/BaseService.test.ts +214 -0
- package/src/services/interfaces/IAuthService.test.ts +184 -0
- package/src/services/interfaces/IAuthService.ts +10 -9
- package/src/services/interfaces/IEventService.test.ts +176 -0
- package/src/services/interfaces/IInactivityService.test.ts +183 -0
- package/src/services/interfaces/IOrganisationService.test.ts +207 -0
- package/src/services/interfaces/IOrganisationService.ts +0 -1
- package/src/styles/core.css +244 -12
- package/src/theming/parseEventColours.test.ts +321 -0
- package/src/theming/parseEventColours.ts +18 -9
- package/src/theming/runtime.test.ts +495 -0
- package/src/theming/runtime.ts +72 -7
- package/src/types/api-result.ts +53 -0
- package/src/types/auth.ts +0 -1
- package/src/types/core.test.ts +397 -0
- package/src/types/database-generated.test.ts +78 -0
- package/src/types/database.generated.ts +45 -10
- package/src/types/event.ts +39 -19
- package/src/types/file-reference.test.ts +351 -0
- package/src/types/file-reference.ts +37 -12
- package/src/types/guards.test.ts +246 -0
- package/src/types/index.test.ts +265 -0
- package/src/types/index.ts +3 -0
- package/src/types/organisation.roles.test.ts +55 -0
- package/src/types/organisation.test.ts +1105 -0
- package/src/types/organisation.ts +15 -15
- package/src/types/rpc-responses.ts +33 -0
- package/src/types/supabase.ts +14 -6
- package/src/types/theme.test.ts +830 -0
- package/src/types/type-validation.test.ts +526 -0
- package/src/types/validation.test.ts +729 -0
- package/src/types/vitest-globals.d.ts +1 -1
- package/src/utils/app/appConfig.test.ts +235 -0
- package/src/utils/app/appIdResolver.test.ts +252 -57
- package/src/utils/app/appIdResolver.ts +31 -20
- package/src/utils/app/appNameResolver.test.ts +18 -10
- package/src/utils/app/appNameResolver.ts +11 -9
- package/src/utils/app/appPortMap.test.ts +125 -0
- package/src/utils/app/appPortMap.ts +51 -0
- package/src/utils/app/buildAppUrl.test.ts +273 -0
- package/src/utils/app/buildAppUrl.ts +114 -0
- package/src/utils/appConfig.unit.test.ts +55 -0
- package/src/utils/audit/audit.test.ts +354 -39
- package/src/utils/audit.unit.test.ts +69 -0
- package/src/utils/auth-utils.unit.test.ts +69 -0
- package/src/utils/bundleAnalysis.unit.test.ts +326 -0
- package/src/utils/cn.unit.test.ts +34 -0
- package/src/utils/context/organisationContext.test.ts +115 -95
- package/src/utils/context/organisationContext.ts +32 -43
- package/src/utils/context/sessionTracking.test.ts +354 -0
- package/src/utils/core/cn.test.ts +66 -0
- package/src/utils/core/debugLogger.test.ts +113 -0
- package/src/utils/core/debugLogger.ts +15 -8
- package/src/utils/core/logger.test.ts +217 -0
- package/src/utils/core/logger.ts +20 -16
- package/src/utils/core/mergeRefs.ts +24 -0
- package/src/utils/debugLogger.test.ts +417 -0
- package/src/utils/device/deviceFingerprint.test.ts +8 -5
- package/src/utils/device/deviceFingerprint.ts +3 -3
- package/src/utils/deviceFingerprint.unit.test.ts +818 -0
- package/src/utils/dynamic/createLazyComponent.tsx +46 -0
- package/src/utils/dynamic/dynamicUtils.test.ts +185 -0
- package/src/utils/dynamic/dynamicUtils.ts +6 -6
- package/src/utils/dynamic/lazyLoad.test.tsx +156 -0
- package/src/utils/dynamic/lazyLoad.tsx +8 -36
- package/src/utils/dynamic/papaparseLoader.ts +7 -0
- package/src/utils/dynamicUtils.unit.test.ts +331 -0
- package/src/utils/file-reference/file-reference.test.ts +1238 -0
- package/src/utils/file-reference/index.ts +330 -348
- package/src/utils/formatDate.unit.test.ts +109 -0
- package/src/utils/formatting/formatDate.test.ts +22 -148
- package/src/utils/formatting/formatDateTime.test.ts +41 -119
- package/src/utils/formatting/formatDateTimeTimezone.test.ts +41 -85
- package/src/utils/formatting/formatNumber.test.ts +259 -0
- package/src/utils/formatting/formatTime.test.ts +36 -128
- package/src/utils/formatting/formatting.ts +1 -1
- package/src/utils/formatting.unit.test.ts +99 -0
- package/src/utils/google-places/googlePlacesUtils.test.ts +127 -36
- package/src/utils/google-places/googlePlacesUtils.ts +67 -86
- package/src/utils/google-places/loadGoogleMapsScript.test.ts +68 -8
- package/src/utils/google-places/loadGoogleMapsScript.ts +140 -118
- package/src/utils/index.ts +52 -11
- package/src/utils/index.unit.test.ts +251 -0
- package/src/utils/lazyLoad.unit.test.tsx +319 -0
- package/src/utils/location/location.test.ts +19 -116
- package/src/utils/logger.unit.test.ts +398 -0
- package/src/utils/organisationContext.unit.test.ts +180 -0
- package/src/utils/performance/bundleAnalysis.test.ts +148 -0
- package/src/utils/performance/bundleAnalysis.ts +16 -22
- package/src/utils/performance/performanceBenchmark.test.ts +251 -0
- package/src/utils/performance/performanceBenchmark.ts +12 -4
- package/src/utils/performance/performanceBudgets.test.ts +241 -0
- package/src/utils/performance/performanceBudgets.ts +9 -6
- package/src/utils/performanceBenchmark.test.ts +174 -0
- package/src/utils/performanceBudgets.unit.test.ts +288 -0
- package/src/utils/permissionTypes.unit.test.ts +250 -0
- package/src/utils/permissionUtils.unit.test.ts +362 -0
- package/src/utils/permissions/permissionTypes.test.ts +149 -0
- package/src/utils/permissions/permissionUtils.test.ts +20 -42
- package/src/utils/persistence/keyDerivation.test.ts +306 -0
- package/src/utils/persistence/sensitiveFieldDetection.test.ts +271 -0
- package/src/utils/persistence/sensitiveFieldDetection.ts +2 -2
- package/src/utils/request-deduplication.test.ts +349 -0
- package/src/utils/request-deduplication.ts +6 -4
- package/src/utils/sanitization.unit.test.ts +346 -0
- package/src/utils/schemaUtils.unit.test.ts +441 -0
- package/src/utils/secureDataAccess.unit.test.ts +334 -0
- package/src/utils/secureErrors.unit.test.ts +390 -0
- package/src/utils/secureStorage.unit.test.ts +289 -0
- package/src/utils/security/auth-utils.ts +38 -27
- package/src/utils/security/secureDataAccess.test.ts +22 -191
- package/src/utils/security/secureDataAccess.ts +241 -281
- package/src/utils/security/secureErrors.test.ts +163 -0
- package/src/utils/security/secureStorage.test.ts +156 -0
- package/src/utils/security/secureStorage.ts +1 -1
- package/src/utils/security/security.test.ts +212 -0
- package/src/utils/security/security.ts +15 -18
- package/src/utils/security/securityMonitor.test.ts +90 -0
- package/src/utils/security/securityMonitor.ts +1 -1
- package/src/utils/security.unit.test.ts +155 -0
- package/src/utils/securityMonitor.unit.test.ts +276 -0
- package/src/utils/sessionTracking.unit.test.ts +218 -0
- package/src/utils/storage/config.unit.test.ts +239 -0
- package/src/utils/storage/helpers.test.ts +769 -456
- package/src/utils/storage/helpers.ts +174 -253
- package/src/utils/storage/index.unit.test.ts +68 -0
- package/src/utils/storage/storageUtils.ts +32 -0
- package/src/utils/storage/types.ts +9 -2
- package/src/utils/supabase/createBaseClient.test.ts +201 -0
- package/src/utils/supabase/createBaseClient.ts +2 -1
- package/src/utils/timezone/timezone.test.ts +26 -44
- package/src/utils/timezone.test.ts +345 -0
- package/src/utils/validation/common.test.ts +115 -0
- package/src/utils/validation/csrf.test.ts +198 -0
- package/src/utils/validation/csrf.ts +42 -41
- package/src/utils/validation/htmlSanitization.ts +27 -31
- package/src/utils/validation/htmlSanitization.unit.test.ts +618 -0
- package/src/utils/validation/passwordSchema.test.ts +164 -0
- package/src/utils/validation/schema.test.ts +127 -0
- package/src/utils/validation/schema.ts +6 -3
- package/src/utils/validation/sqlInjectionProtection.test.ts +165 -0
- package/src/utils/validation/sqlInjectionProtection.ts +2 -2
- package/src/utils/validation/user.test.ts +173 -0
- package/src/utils/validation/validation.test.ts +197 -0
- package/src/utils/validation/validationUtils.test.ts +294 -0
- package/src/utils/validation.unit.test.ts +307 -0
- package/src/utils/validationUtils.unit.test.ts +558 -0
- package/src/vite-env.d.ts +6 -0
- package/dist/AuthService-DmfO5rGS.d.ts +0 -524
- package/dist/DataTable-DRUIgtUH.d.ts +0 -166
- package/dist/DataTable-SOAFXIWY.js +0 -15
- package/dist/PublicPageProvider-CIGSujI2.d.ts +0 -4147
- package/dist/UnifiedAuthProvider-7SNDOWYD.js +0 -7
- package/dist/UnifiedAuthProvider-CKvHP1MK.d.ts +0 -139
- package/dist/api-7P7DI652.js +0 -4
- package/dist/audit-MYQXYZFU.js +0 -3
- package/dist/auth-BZOJqrdd.d.ts +0 -49
- package/dist/chunk-4DDCYDQ3.js +0 -544
- package/dist/chunk-5HNSDQWH.js +0 -5046
- package/dist/chunk-5W2A3DRC.js +0 -164
- package/dist/chunk-6GLLNA6U.js +0 -31
- package/dist/chunk-7ILTDCL2.js +0 -80
- package/dist/chunk-A3W6LW53.js +0 -70
- package/dist/chunk-AHU7G2R5.js +0 -423
- package/dist/chunk-C7ZQ5O4C.js +0 -481
- package/dist/chunk-EF2UGZWY.js +0 -611
- package/dist/chunk-FEJLJNWA.js +0 -181
- package/dist/chunk-FYHN4DD5.js +0 -415
- package/dist/chunk-GS5672WG.js +0 -2003
- package/dist/chunk-HF6O3O37.js +0 -187
- package/dist/chunk-J2U36LHD.js +0 -8517
- package/dist/chunk-LX6U42O3.js +0 -2177
- package/dist/chunk-MPBLMWVR.js +0 -2161
- package/dist/chunk-OJ4SKRSV.js +0 -105
- package/dist/chunk-S6ZQKDY6.js +0 -62
- package/dist/chunk-S7DKJPLT.js +0 -699
- package/dist/chunk-T5CVK4R3.js +0 -2816
- package/dist/chunk-TTRFSOKR.js +0 -121
- package/dist/chunk-Z2FNRKF3.js +0 -994
- package/dist/database.generated-DT8JTZiP.d.ts +0 -9406
- package/dist/event-CW5YB_2p.d.ts +0 -239
- package/dist/file-reference-BavO2eQj.d.ts +0 -148
- package/dist/functions-lBy5L2ry.d.ts +0 -208
- package/dist/timezone-0AyangqX.d.ts +0 -697
- package/dist/types-BeoeWV5I.d.ts +0 -110
- package/dist/types-DXstZpNI.d.ts +0 -614
- package/dist/types-t9H8qKRw.d.ts +0 -55
- package/dist/usePublicRouteParams-DQLrDqDb.d.ts +0 -876
- package/dist/useToast-AyaT-x7p.d.ts +0 -68
- package/dist/validation-643vUDZW.d.ts +0 -177
- package/scripts/build-docs-incremental.js +0 -179
- package/scripts/eslint-audit.cjs +0 -123
- package/scripts/generate-docs.js +0 -157
- package/scripts/install-cursor-rules.cjs +0 -255
- package/scripts/install-eslint-config.cjs +0 -349
- package/scripts/setup-build-cache.js +0 -73
- package/scripts/validate-pre-publish.js +0 -145
- package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +0 -260
- package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +0 -224
- package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +0 -273
- package/src/__tests__/helpers/__tests__/test-providers.test.tsx +0 -99
- package/src/__tests__/helpers/__tests__/test-utils.test.tsx +0 -448
- package/src/__tests__/helpers/__tests__/timer-utils.test.ts +0 -371
- package/src/__tests__/hooks/usePermissions.test.ts +0 -268
- package/src/__tests__/integration/UserProfile.test.tsx +0 -124
- package/src/__tests__/public-recipe-view.test.ts +0 -228
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +0 -220
- package/src/__tests__/rls-policies.test.ts +0 -471
- package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +0 -759
- package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +0 -524
- package/src/components/DataTable/__tests__/DataTable.export.test.tsx +0 -705
- package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +0 -658
- package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +0 -192
- package/src/components/DataTable/__tests__/DataTable.select-label-display.test.tsx +0 -483
- package/src/components/DataTable/__tests__/DataTable.test.tsx +0 -876
- package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +0 -220
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +0 -1474
- package/src/components/DataTable/__tests__/README.md +0 -145
- package/src/components/DataTable/__tests__/a11y.basic.test.tsx +0 -788
- package/src/components/DataTable/__tests__/keyboard.test.tsx +0 -756
- package/src/components/DataTable/__tests__/mocks/MockRBACProvider.tsx +0 -66
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +0 -730
- package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx +0 -325
- package/src/components/DataTable/__tests__/styles.test.ts +0 -382
- package/src/components/DataTable/__tests__/test-utils/dataFactories.ts +0 -103
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +0 -380
- package/src/components/DataTable/__tests__/test-utils.ts +0 -94
- package/src/components/DataTable/components/AccessDeniedPage.tsx +0 -159
- package/src/components/DataTable/components/ActionButtons.tsx +0 -190
- package/src/components/DataTable/components/BulkOperationsDropdown.tsx +0 -160
- package/src/components/DataTable/components/ColumnFilter.tsx +0 -118
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +0 -114
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +0 -225
- package/src/components/DataTable/components/DataTableLayout.tsx +0 -573
- package/src/components/DataTable/components/DataTableModals.tsx +0 -245
- package/src/components/DataTable/components/DataTableToolbar.tsx +0 -271
- package/src/components/DataTable/components/EditFields.tsx +0 -327
- package/src/components/DataTable/components/EditableRow.tsx +0 -462
- package/src/components/DataTable/components/EmptyState.tsx +0 -79
- package/src/components/DataTable/components/FilterRow.tsx +0 -141
- package/src/components/DataTable/components/LoadingState.tsx +0 -17
- package/src/components/DataTable/components/PaginationControls.tsx +0 -289
- package/src/components/DataTable/components/RowComponent.tsx +0 -403
- package/src/components/DataTable/components/SortIndicator.tsx +0 -50
- package/src/components/DataTable/components/UnifiedTableBody.tsx +0 -355
- package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +0 -657
- package/src/components/DataTable/components/__tests__/ActionButtons.test.tsx +0 -913
- package/src/components/DataTable/components/__tests__/BulkOperationsDropdown.test.tsx +0 -572
- package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +0 -612
- package/src/components/DataTable/components/__tests__/ColumnVisibilityDropdown.test.tsx +0 -708
- package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +0 -479
- package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +0 -475
- package/src/components/DataTable/components/__tests__/DataTableToolbar.test.tsx +0 -157
- package/src/components/DataTable/components/__tests__/EditableRow.test.tsx +0 -1061
- package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +0 -437
- package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +0 -474
- package/src/components/DataTable/components/__tests__/GroupingDropdown.test.tsx +0 -617
- package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +0 -1093
- package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +0 -139
- package/src/components/DataTable/components/__tests__/PaginationControls.test.tsx +0 -519
- package/src/components/DataTable/components/__tests__/UnifiedTableBody.test.tsx +0 -1004
- package/src/components/DataTable/components/cellValueUtils.ts +0 -40
- package/src/components/DataTable/components/hooks/useImportModalFocus.ts +0 -53
- package/src/components/DataTable/components/hooks/usePermissionTracking.ts +0 -122
- package/src/components/DataTable/components/index.ts +0 -16
- package/src/components/DataTable/context/__tests__/DataTableContext.test.tsx +0 -342
- package/src/components/DataTable/core/ActionManager.ts +0 -235
- package/src/components/DataTable/core/ColumnManager.ts +0 -205
- package/src/components/DataTable/core/DataManager.ts +0 -188
- package/src/components/DataTable/core/LocalDataAdapter.ts +0 -274
- package/src/components/DataTable/core/PluginRegistry.ts +0 -229
- package/src/components/DataTable/core/StateManager.ts +0 -312
- package/src/components/DataTable/core/__tests__/ActionManager.test.ts +0 -123
- package/src/components/DataTable/core/__tests__/ColumnFactory.test.ts +0 -305
- package/src/components/DataTable/core/__tests__/ColumnManager.test.ts +0 -84
- package/src/components/DataTable/core/__tests__/DataManager.test.ts +0 -115
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +0 -100
- package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +0 -120
- package/src/components/DataTable/core/__tests__/StateManager.test.ts +0 -104
- package/src/components/DataTable/core/index.ts +0 -1
- package/src/components/DataTable/core/interfaces.ts +0 -338
- package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.test.ts +0 -521
- package/src/components/DataTable/hooks/__tests__/useColumnVisibilityPersistence.test.ts +0 -167
- package/src/components/DataTable/hooks/__tests__/useDataTableConfiguration.test.ts +0 -124
- package/src/components/DataTable/hooks/__tests__/useDataTableDataPipeline.test.ts +0 -117
- package/src/components/DataTable/hooks/__tests__/useDataTablePermissions.test.ts +0 -102
- package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +0 -596
- package/src/components/DataTable/hooks/__tests__/useEffectiveColumnOrder.test.ts +0 -53
- package/src/components/DataTable/hooks/__tests__/useHierarchicalState.test.ts +0 -214
- package/src/components/DataTable/hooks/__tests__/useTableColumns.test.ts +0 -448
- package/src/components/DataTable/hooks/index.ts +0 -13
- package/src/components/DataTable/types.ts +0 -761
- package/src/components/DataTable/utils/__tests__/a11yUtils.test.ts +0 -612
- package/src/components/DataTable/utils/__tests__/columnUtils.test.ts +0 -94
- package/src/components/DataTable/utils/__tests__/errorHandling.test.ts +0 -266
- package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +0 -954
- package/src/components/DataTable/utils/__tests__/flexibleImport.test.ts +0 -573
- package/src/components/DataTable/utils/__tests__/hierarchicalSorting.test.ts +0 -247
- package/src/components/DataTable/utils/__tests__/hierarchicalUtils.test.ts +0 -570
- package/src/components/DataTable/utils/__tests__/performanceUtils.test.ts +0 -470
- package/src/components/DataTable/utils/__tests__/rowUtils.test.ts +0 -251
- package/src/components/DataTable/utils/__tests__/selectFieldUtils.test.ts +0 -207
- package/src/components/DataTable/utils/index.ts +0 -10
- package/src/components/PublicLayout/index.ts +0 -32
- package/src/components/Select/hooks/useSelectEvents.ts +0 -87
- package/src/components/Select/hooks/useSelectSearch.ts +0 -91
- package/src/components/Select/hooks/useSelectState.ts +0 -104
- package/src/components/Select/utils/text.ts +0 -26
- package/src/hooks/__tests__/ServiceHooks.test.tsx +0 -615
- package/src/hooks/__tests__/hooks.integration.test.tsx +0 -607
- package/src/hooks/__tests__/index.unit.test.ts +0 -220
- package/src/hooks/__tests__/useApiFetch.unit.test.ts +0 -111
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +0 -347
- package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +0 -144
- package/src/hooks/__tests__/useDataTablePerformance.unit.test.ts +0 -776
- package/src/hooks/__tests__/useDataTableState.test.ts +0 -76
- package/src/hooks/__tests__/useDebounce.unit.test.ts +0 -82
- package/src/hooks/__tests__/useEvents.unit.test.ts +0 -252
- package/src/hooks/__tests__/useFileDisplay.unit.test.ts +0 -1112
- package/src/hooks/__tests__/useFileUrl.unit.test.ts +0 -916
- package/src/hooks/__tests__/useFileUrlCache.test.ts +0 -129
- package/src/hooks/__tests__/useFocusManagement.unit.test.ts +0 -230
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +0 -828
- package/src/hooks/__tests__/useFormDialog.test.ts +0 -478
- package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +0 -446
- package/src/hooks/__tests__/useIsMobile.unit.test.ts +0 -317
- package/src/hooks/__tests__/useKeyboardShortcuts.unit.test.ts +0 -910
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +0 -294
- package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +0 -961
- package/src/hooks/__tests__/useOrganisations.unit.test.ts +0 -369
- package/src/hooks/__tests__/usePerformanceMonitor.unit.test.ts +0 -694
- package/src/hooks/__tests__/usePermissionCache.simple.test.ts +0 -192
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +0 -741
- package/src/hooks/__tests__/usePreventTabReload.test.ts +0 -88
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +0 -785
- package/src/hooks/__tests__/usePublicEvent.test.ts +0 -678
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +0 -630
- package/src/hooks/__tests__/usePublicFileDisplay.test.ts +0 -951
- package/src/hooks/__tests__/usePublicRouteParams.unit.test.ts +0 -443
- package/src/hooks/__tests__/useQueryCache.test.ts +0 -144
- package/src/hooks/__tests__/useRBAC.unit.test.ts +0 -236
- package/src/hooks/__tests__/useSessionDraft.test.ts +0 -163
- package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +0 -390
- package/src/hooks/__tests__/useStorage.unit.test.ts +0 -751
- package/src/hooks/__tests__/useToast.unit.test.tsx +0 -481
- package/src/hooks/__tests__/useZodForm.unit.test.tsx +0 -37
- package/src/hooks/public/index.ts +0 -36
- package/src/hooks/public/usePublicFileDisplay.ts +0 -504
- package/src/hooks/useFileDisplay.ts +0 -715
- package/src/providers/OrganisationProvider.tsx +0 -92
- package/src/providers/__tests__/AuthProvider.test.tsx +0 -287
- package/src/providers/__tests__/EventProvider.test.tsx +0 -551
- package/src/providers/__tests__/InactivityProvider.test-helper.tsx +0 -65
- package/src/providers/__tests__/InactivityProvider.test.tsx +0 -572
- package/src/providers/__tests__/OrganisationProvider.test.tsx +0 -617
- package/src/providers/__tests__/ProviderLifecycle.test.tsx +0 -424
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +0 -596
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +0 -263
- package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +0 -294
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +0 -434
- package/src/rbac/__tests__/auth-rbac-security.integration.test.tsx +0 -313
- package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +0 -486
- package/src/rbac/__tests__/cache-invalidation.test.ts +0 -399
- package/src/rbac/__tests__/engine.comprehensive.test.ts +0 -813
- package/src/rbac/__tests__/isSuperAdmin.real.test.ts +0 -82
- package/src/rbac/__tests__/rbac-core.test.tsx +0 -276
- package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +0 -392
- package/src/rbac/__tests__/rbac-engine-simplified.test.ts +0 -258
- package/src/rbac/__tests__/rbac-functions.test.ts +0 -647
- package/src/rbac/__tests__/rbac-integration.test.ts +0 -524
- package/src/rbac/__tests__/rbac-role-isolation.test.ts +0 -456
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +0 -282
- package/src/rbac/audit-enhanced.ts +0 -384
- package/src/rbac/compliance/database-validator.ts +0 -165
- package/src/rbac/compliance/index.ts +0 -48
- package/src/rbac/compliance/pattern-detector.ts +0 -553
- package/src/rbac/compliance/quick-fix-suggestions.ts +0 -209
- package/src/rbac/compliance/runtime-compliance.ts +0 -99
- package/src/rbac/compliance/setup-validator.ts +0 -131
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +0 -975
- package/src/rbac/components/__tests__/PagePermissionGuard.performance.test.tsx +0 -248
- package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +0 -242
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +0 -1107
- package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +0 -184
- package/src/rbac/components/index.ts +0 -26
- package/src/rbac/hooks/__tests__/usePermissions.integration.test.ts +0 -432
- package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +0 -579
- package/src/rbac/hooks/index.ts +0 -34
- package/src/rbac/hooks/permissions/index.ts +0 -4
- package/src/rbac/hooks/useRBAC.simple.test.ts +0 -95
- package/src/rbac/utils/__tests__/contextValidator.test.ts +0 -128
- package/src/rbac/utils/__tests__/deep-equal.test.ts +0 -53
- package/src/rbac/utils/__tests__/eventContext.test.ts +0 -433
- package/src/rbac/utils/__tests__/eventContext.unit.test.ts +0 -490
- package/src/services/__tests__/AuthService.restoreSession.test.ts +0 -39
- package/src/services/__tests__/AuthService.test.ts +0 -1332
- package/src/services/__tests__/BaseService.test.ts +0 -314
- package/src/services/__tests__/EventService.eventColours.test.ts +0 -76
- package/src/services/__tests__/EventService.test.ts +0 -1025
- package/src/services/__tests__/InactivityService.lifecycle.test.ts +0 -411
- package/src/services/__tests__/InactivityService.test.ts +0 -654
- package/src/services/__tests__/OrganisationService.pagination.test.ts +0 -409
- package/src/services/__tests__/OrganisationService.test.ts +0 -1176
- package/src/theming/__tests__/parseEventColours.test.ts +0 -321
- package/src/theming/__tests__/runtime.test.ts +0 -569
- package/src/types/__tests__/file-reference.test.ts +0 -447
- package/src/types/__tests__/guards.test.ts +0 -246
- package/src/types/__tests__/organisation.roles.test.ts +0 -55
- package/src/types/__tests__/organisation.test.ts +0 -1133
- package/src/types/__tests__/theme.test.ts +0 -830
- package/src/types/__tests__/type-validation.test.ts +0 -526
- package/src/types/__tests__/validation.test.ts +0 -731
- package/src/utils/__tests__/appConfig.unit.test.ts +0 -55
- package/src/utils/__tests__/audit.unit.test.ts +0 -69
- package/src/utils/__tests__/auth-utils.unit.test.ts +0 -70
- package/src/utils/__tests__/bundleAnalysis.unit.test.ts +0 -339
- package/src/utils/__tests__/cn.unit.test.ts +0 -34
- package/src/utils/__tests__/debugLogger.test.ts +0 -417
- package/src/utils/__tests__/deviceFingerprint.unit.test.ts +0 -818
- package/src/utils/__tests__/dynamicUtils.unit.test.ts +0 -318
- package/src/utils/__tests__/formatDate.unit.test.ts +0 -109
- package/src/utils/__tests__/formatting.unit.test.ts +0 -99
- package/src/utils/__tests__/index.unit.test.ts +0 -251
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +0 -321
- package/src/utils/__tests__/logger.unit.test.ts +0 -398
- package/src/utils/__tests__/organisationContext.unit.test.ts +0 -191
- package/src/utils/__tests__/performanceBenchmark.test.ts +0 -175
- package/src/utils/__tests__/performanceBudgets.unit.test.ts +0 -253
- package/src/utils/__tests__/permissionTypes.unit.test.ts +0 -250
- package/src/utils/__tests__/permissionUtils.unit.test.ts +0 -362
- package/src/utils/__tests__/sanitization.unit.test.ts +0 -346
- package/src/utils/__tests__/schemaUtils.unit.test.ts +0 -441
- package/src/utils/__tests__/secureDataAccess.unit.test.ts +0 -335
- package/src/utils/__tests__/secureErrors.unit.test.ts +0 -390
- package/src/utils/__tests__/secureStorage.unit.test.ts +0 -289
- package/src/utils/__tests__/security.unit.test.ts +0 -149
- package/src/utils/__tests__/securityMonitor.unit.test.ts +0 -276
- package/src/utils/__tests__/sessionTracking.unit.test.ts +0 -218
- package/src/utils/__tests__/timezone.test.ts +0 -345
- package/src/utils/__tests__/validation.unit.test.ts +0 -308
- package/src/utils/__tests__/validationUtils.unit.test.ts +0 -555
- package/src/utils/app/appNameResolver.simple.test.ts +0 -212
- package/src/utils/file-reference/__tests__/file-reference.test.ts +0 -875
- package/src/utils/google-places/index.ts +0 -26
- package/src/utils/location/index.ts +0 -16
- package/src/utils/persistence/__tests__/keyDerivation.test.ts +0 -135
- package/src/utils/persistence/__tests__/sensitiveFieldDetection.test.ts +0 -123
- package/src/utils/storage/__tests__/helpers.unit.test.ts +0 -332
- package/src/utils/storage/__tests__/index.unit.test.ts +0 -16
- package/src/utils/storage/index.ts +0 -67
- package/src/utils/timezone/index.ts +0 -17
- package/src/utils/validation/__tests__/csrf.test.ts +0 -105
- package/src/utils/validation/__tests__/htmlSanitization.unit.test.ts +0 -598
- package/src/utils/validation/__tests__/sqlInjectionProtection.test.ts +0 -92
- package/src/utils/validation/__tests__/validationUtils.test.ts +0 -72
- package/src/utils/validation/index.ts +0 -73
- /package/src/components/DataTable/{components/__tests__ → ui}/COVERAGE_NOTE.md +0 -0
- /package/src/components/DataTable/utils/{__tests__/COVERAGE_NOTE.md → COVERAGE_NOTE.md} +0 -0
- /package/src/providers/{__tests__/README.md → README.md} +0 -0
- /package/src/types/{__tests__/README.md → README.md} +0 -0
package/dist/rbac/index.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
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, l as UserRBACContext, P as Permission } 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, l as UserRBACContext, P as Permission } from '../types-CvOPXWWZ.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-CvOPXWWZ.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-DH45k8ec.js';
|
|
4
4
|
import { SupabaseClient } from '@supabase/supabase-js';
|
|
5
|
-
import { D as Database } from '../database.generated-
|
|
5
|
+
import { D as Database } from '../database.generated-qkdoiVrJ.js';
|
|
6
|
+
import { A as ApiResult } from '../api-result-USV1Czr-.js';
|
|
6
7
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
7
8
|
import React__default from 'react';
|
|
8
|
-
import { a as NavigationItem } from '../types-
|
|
9
|
+
import { a as NavigationItem } from '../types-BE2sEHKd.js';
|
|
9
10
|
import '../core-CUElvH_C.js';
|
|
10
11
|
|
|
11
12
|
/**
|
|
@@ -51,31 +52,59 @@ interface SecurityContext {
|
|
|
51
52
|
*/
|
|
52
53
|
|
|
53
54
|
type LogLevel = 'error' | 'warn' | 'info' | 'debug';
|
|
54
|
-
|
|
55
|
+
/** Cache configuration for RBAC (TTL, enabled, sessionTtl). */
|
|
56
|
+
interface RBACCacheConfig {
|
|
57
|
+
ttl?: number;
|
|
58
|
+
enabled?: boolean;
|
|
59
|
+
/** Session cache TTL in milliseconds (default: 5 minutes) */
|
|
60
|
+
sessionTtl?: number;
|
|
61
|
+
}
|
|
62
|
+
/** Audit configuration for RBAC (enabled, logLevel, batched, batchWindow, batchSize). */
|
|
63
|
+
interface RBACAuditConfig {
|
|
64
|
+
enabled?: boolean;
|
|
65
|
+
logLevel?: LogLevel;
|
|
66
|
+
/** Enable batched audit logging (default: true) */
|
|
67
|
+
batched?: boolean;
|
|
68
|
+
/** Time window in milliseconds (default: 100ms) */
|
|
69
|
+
batchWindow?: number;
|
|
70
|
+
/** Maximum batch size (default: 10) */
|
|
71
|
+
batchSize?: number;
|
|
72
|
+
}
|
|
73
|
+
/** Performance configuration for RBAC (deduplication, batched audit, tracking). */
|
|
74
|
+
interface RBACPerformanceConfig {
|
|
75
|
+
/** Enable request deduplication (default: true) */
|
|
76
|
+
enableRequestDeduplication?: boolean;
|
|
77
|
+
/** Enable batched audit logging (default: true) */
|
|
78
|
+
enableBatchedAuditLogging?: boolean;
|
|
79
|
+
/** Enable performance tracking (default: false in production) */
|
|
80
|
+
enablePerformanceTracking?: boolean;
|
|
81
|
+
}
|
|
82
|
+
/** Core RBAC config (supabase, debug, logLevel, etc.) (ISP). */
|
|
83
|
+
interface RBACConfigCore {
|
|
55
84
|
supabase: SupabaseClient<Database>;
|
|
56
85
|
debug?: boolean;
|
|
57
86
|
logLevel?: LogLevel;
|
|
58
87
|
developmentMode?: boolean;
|
|
59
88
|
mockPermissions?: Record<string, boolean>;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
};
|
|
89
|
+
}
|
|
90
|
+
/** Cache config slice for RBAC (ISP). */
|
|
91
|
+
interface RBACConfigCache {
|
|
92
|
+
cache?: RBACCacheConfig;
|
|
93
|
+
}
|
|
94
|
+
/** Audit config slice for RBAC (ISP). */
|
|
95
|
+
interface RBACConfigAudit {
|
|
96
|
+
audit?: RBACAuditConfig;
|
|
97
|
+
}
|
|
98
|
+
/** Security config slice for RBAC (ISP). */
|
|
99
|
+
interface RBACConfigSecurity {
|
|
72
100
|
security?: Partial<RBACSecurityConfig>;
|
|
73
|
-
performance?: {
|
|
74
|
-
enableRequestDeduplication?: boolean;
|
|
75
|
-
enableBatchedAuditLogging?: boolean;
|
|
76
|
-
enablePerformanceTracking?: boolean;
|
|
77
|
-
};
|
|
78
101
|
}
|
|
102
|
+
/** Performance config slice for RBAC (ISP). */
|
|
103
|
+
interface RBACConfigPerformance {
|
|
104
|
+
performance?: RBACPerformanceConfig;
|
|
105
|
+
}
|
|
106
|
+
/** RBAC config (ISP: composed from focused interfaces). */
|
|
107
|
+
type RBACConfig = RBACConfigCore & RBACConfigCache & RBACConfigAudit & RBACConfigSecurity & RBACConfigPerformance;
|
|
79
108
|
interface RBACLogger {
|
|
80
109
|
error: (message: string, ...args: unknown[]) => void;
|
|
81
110
|
warn: (message: string, ...args: unknown[]) => void;
|
|
@@ -129,6 +158,10 @@ declare class SecureSupabaseClient {
|
|
|
129
158
|
*
|
|
130
159
|
* This allowlist enables compliant consuming apps to use `secureSupabase.rpc(...)`
|
|
131
160
|
* even before an organisation is selected (common during initial page load/refresh).
|
|
161
|
+
*
|
|
162
|
+
* IMPORTANT: Do NOT add `data_rbac_roles_list` here. Only super admins may call
|
|
163
|
+
* that RPC without org context (e.g. "All Organizations" / event roles). The
|
|
164
|
+
* org check is skipped in validateContextForRpc when isSuperAdmin is true.
|
|
132
165
|
*/
|
|
133
166
|
private static readonly GLOBAL_RPC_ALLOWLIST;
|
|
134
167
|
constructor(supabaseUrl: string, supabaseKey: string, organisationId: UUID | null, eventId?: string, appId?: UUID, isSuperAdmin?: boolean, existingClient?: SupabaseClient<Database>);
|
|
@@ -567,7 +600,7 @@ interface PermissionCheckAuditEvent {
|
|
|
567
600
|
duration_ms: number;
|
|
568
601
|
cache_hit?: boolean;
|
|
569
602
|
cache_source?: 'memory' | 'database' | 'rpc';
|
|
570
|
-
metadata?: Record<string,
|
|
603
|
+
metadata?: Record<string, unknown>;
|
|
571
604
|
}
|
|
572
605
|
/**
|
|
573
606
|
* Audit event payload for permission denied
|
|
@@ -581,7 +614,7 @@ interface PermissionDeniedAuditEvent {
|
|
|
581
614
|
pageId?: UUID;
|
|
582
615
|
permission: string;
|
|
583
616
|
source: AuditEventSource;
|
|
584
|
-
metadata?: Record<string,
|
|
617
|
+
metadata?: Record<string, unknown>;
|
|
585
618
|
}
|
|
586
619
|
/**
|
|
587
620
|
* Audit event payload for role granted
|
|
@@ -594,7 +627,7 @@ interface RoleGrantedAuditEvent {
|
|
|
594
627
|
appId?: UUID;
|
|
595
628
|
role: string;
|
|
596
629
|
grantedBy: UUID;
|
|
597
|
-
metadata?: Record<string,
|
|
630
|
+
metadata?: Record<string, unknown>;
|
|
598
631
|
}
|
|
599
632
|
/**
|
|
600
633
|
* Audit event payload for role revoked
|
|
@@ -607,7 +640,7 @@ interface RoleRevokedAuditEvent {
|
|
|
607
640
|
appId?: UUID;
|
|
608
641
|
role: string;
|
|
609
642
|
revokedBy: UUID;
|
|
610
|
-
metadata?: Record<string,
|
|
643
|
+
metadata?: Record<string, unknown>;
|
|
611
644
|
}
|
|
612
645
|
/**
|
|
613
646
|
* Audit event payload for RLS denied
|
|
@@ -618,7 +651,7 @@ interface RLSDeniedAuditEvent {
|
|
|
618
651
|
organisationId: UUID;
|
|
619
652
|
table: string;
|
|
620
653
|
operation: string;
|
|
621
|
-
metadata?: Record<string,
|
|
654
|
+
metadata?: Record<string, unknown>;
|
|
622
655
|
}
|
|
623
656
|
/**
|
|
624
657
|
* Union type for all audit events
|
|
@@ -746,8 +779,9 @@ declare function getGlobalAuditManager(): RBACAuditManager | null;
|
|
|
746
779
|
* Emit an audit event using the global audit manager
|
|
747
780
|
*
|
|
748
781
|
* @param event - Audit event payload
|
|
782
|
+
* @returns ApiResult for consistency with API error handling
|
|
749
783
|
*/
|
|
750
|
-
declare function emitAuditEvent(event: AuditEventPayload): Promise<void
|
|
784
|
+
declare function emitAuditEvent(event: AuditEventPayload): Promise<ApiResult<void>>;
|
|
751
785
|
|
|
752
786
|
/**
|
|
753
787
|
* RBAC Core Engine - Simplified Version
|
|
@@ -864,8 +898,12 @@ interface PagePermissionGuardProps {
|
|
|
864
898
|
onDenied?: (pageName: string, operation: string) => void;
|
|
865
899
|
/** Loading state content */
|
|
866
900
|
loading?: React__default.ReactNode;
|
|
901
|
+
/** Print page orientation for this page (default: 'portrait') */
|
|
902
|
+
printPageOrientation?: 'portrait' | 'landscape';
|
|
903
|
+
/** Title used in print headers/margin-box (sets --print-title). */
|
|
904
|
+
printTitle?: string;
|
|
867
905
|
}
|
|
868
|
-
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>;
|
|
906
|
+
declare const PagePermissionGuard: React__default.MemoExoticComponent<({ pageName, operation, children, fallback, strictMode, auditLog, pageId, scope, onDenied, loading, printPageOrientation, printTitle }: 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>;
|
|
869
907
|
|
|
870
908
|
interface NavigationGuardProps {
|
|
871
909
|
/** Navigation item being protected */
|
|
@@ -1099,69 +1137,6 @@ interface ResourcePermissions {
|
|
|
1099
1137
|
/** Error from any permission check or scope resolution */
|
|
1100
1138
|
error: Error | null;
|
|
1101
1139
|
}
|
|
1102
|
-
/**
|
|
1103
|
-
* Hook to check permissions for a specific resource
|
|
1104
|
-
*
|
|
1105
|
-
* This hook encapsulates the common pattern of checking create/update/delete/read
|
|
1106
|
-
* permissions for a resource type. It handles scope resolution, user context,
|
|
1107
|
-
* and provides a simple API for permission checking.
|
|
1108
|
-
*
|
|
1109
|
-
* **Page Permission Support:**
|
|
1110
|
-
* When an `appId` is available in the resolved scope, the hook automatically:
|
|
1111
|
-
* 1. Waits for scope resolution to complete (including `appId` being set)
|
|
1112
|
-
* 2. Constructs permission strings with the `page.` prefix (e.g., `create:page.planning`)
|
|
1113
|
-
* 3. Passes the resource name as `pageId` to enable page-based permission checks
|
|
1114
|
-
*
|
|
1115
|
-
* This ensures permission strings match the format returned by `rbac_permissions_get`
|
|
1116
|
-
* (e.g., `create:page.planning`) rather than resource-based format (e.g., `create:planning`).
|
|
1117
|
-
*
|
|
1118
|
-
* **Scope Resolution Timing:**
|
|
1119
|
-
* The hook waits for scope resolution to complete before constructing permission strings.
|
|
1120
|
-
* This prevents timing issues where permission checks use the wrong format (e.g., `delete:planning`
|
|
1121
|
-
* instead of `delete:page.planning`) when `appId` is not yet available in the scope.
|
|
1122
|
-
*
|
|
1123
|
-
* The RPC function `rbac_check_permission_simplified` will resolve the page name to a page ID
|
|
1124
|
-
* and check page permissions if the resource matches a registered page in `rbac_app_pages`.
|
|
1125
|
-
* If the resource is not a registered page, it will fall back to resource-based permission checking.
|
|
1126
|
-
*
|
|
1127
|
-
* @param resource - The resource name (e.g., 'contacts', 'risks', 'planning')
|
|
1128
|
-
* Can be a resource name or a page name registered in rbac_app_pages
|
|
1129
|
-
* @param options - Optional configuration
|
|
1130
|
-
* @param options.enableRead - Whether to check read permissions (default: false)
|
|
1131
|
-
* @param options.requireScope - Whether scope resolution is required (default: true)
|
|
1132
|
-
* @returns Object with permission check functions and scope
|
|
1133
|
-
*
|
|
1134
|
-
* @example
|
|
1135
|
-
* ```tsx
|
|
1136
|
-
* function useContacts() {
|
|
1137
|
-
* const { canCreate, canUpdate, canDelete } = useResourcePermissions('contacts');
|
|
1138
|
-
*
|
|
1139
|
-
* const addContact = async (data: ContactData) => {
|
|
1140
|
-
* if (!canCreate('contacts')) {
|
|
1141
|
-
* throw new Error("Permission denied");
|
|
1142
|
-
* }
|
|
1143
|
-
* // ... perform mutation
|
|
1144
|
-
* };
|
|
1145
|
-
* }
|
|
1146
|
-
* ```
|
|
1147
|
-
*
|
|
1148
|
-
* @example
|
|
1149
|
-
* ```tsx
|
|
1150
|
-
* // Works with page names when appId is available in scope
|
|
1151
|
-
* function usePlanning() {
|
|
1152
|
-
* const { canCreate, canUpdate, canDelete } = useResourcePermissions('planning');
|
|
1153
|
-
*
|
|
1154
|
-
* // Will check page permissions if 'planning' is registered in rbac_app_pages
|
|
1155
|
-
* // Falls back to resource permissions if not a registered page
|
|
1156
|
-
* const deleteItem = async (id: string) => {
|
|
1157
|
-
* if (!canDelete('planning')) {
|
|
1158
|
-
* throw new Error("Permission denied");
|
|
1159
|
-
* }
|
|
1160
|
-
* // ... perform deletion
|
|
1161
|
-
* };
|
|
1162
|
-
* }
|
|
1163
|
-
* ```
|
|
1164
|
-
*/
|
|
1165
1140
|
declare function useResourcePermissions(resource: string, options?: UseResourcePermissionsOptions): ResourcePermissions;
|
|
1166
1141
|
|
|
1167
1142
|
/**
|
|
@@ -1176,14 +1151,14 @@ declare function useResourcePermissions(resource: string, options?: UseResourceP
|
|
|
1176
1151
|
* function MyComponent() {
|
|
1177
1152
|
* const { accessLevel, isLoading, error } = useAccessLevel(userId, scope);
|
|
1178
1153
|
*
|
|
1179
|
-
* if (isLoading) return
|
|
1180
|
-
* if (error) return <
|
|
1154
|
+
* if (isLoading) return null; // or use a loading component
|
|
1155
|
+
* if (error) return <Alert variant="destructive"><AlertDescription>Error: {error.message}</AlertDescription></Alert>;
|
|
1181
1156
|
*
|
|
1182
1157
|
* return (
|
|
1183
|
-
*
|
|
1184
|
-
* Access Level: {accessLevel}
|
|
1158
|
+
* <>
|
|
1159
|
+
* <p>Access Level: {accessLevel}</p>
|
|
1185
1160
|
* {accessLevel >= AccessLevel.ADMIN && <AdminPanel />}
|
|
1186
|
-
*
|
|
1161
|
+
* </>
|
|
1187
1162
|
* );
|
|
1188
1163
|
* }
|
|
1189
1164
|
* ```
|
|
@@ -1211,10 +1186,10 @@ declare function useAccessLevel(userId: UUID, scope: Scope): {
|
|
|
1211
1186
|
* function MyComponent() {
|
|
1212
1187
|
* const { can, isLoading, error } = useCan(userId, scope, 'read:users');
|
|
1213
1188
|
*
|
|
1214
|
-
* if (isLoading) return
|
|
1215
|
-
* if (error) return <
|
|
1189
|
+
* if (isLoading) return null; // or use a loading component
|
|
1190
|
+
* if (error) return <Alert variant="destructive"><AlertDescription>Error: {error.message}</AlertDescription></Alert>;
|
|
1216
1191
|
*
|
|
1217
|
-
* return can ? <UserList /> : <
|
|
1192
|
+
* return can ? <UserList /> : <AccessDenied />;
|
|
1218
1193
|
* }
|
|
1219
1194
|
* ```
|
|
1220
1195
|
*/
|
|
@@ -1250,15 +1225,15 @@ precomputedSuperAdmin?: boolean | null, appName?: string): {
|
|
|
1250
1225
|
* ['read:users', 'create:users', 'update:users']
|
|
1251
1226
|
* );
|
|
1252
1227
|
*
|
|
1253
|
-
* if (isLoading) return
|
|
1254
|
-
* if (error) return <
|
|
1228
|
+
* if (isLoading) return null; // or use a loading component
|
|
1229
|
+
* if (error) return <Alert variant="destructive"><AlertDescription>Error: {error.message}</AlertDescription></Alert>;
|
|
1255
1230
|
*
|
|
1256
1231
|
* return (
|
|
1257
|
-
*
|
|
1232
|
+
* <>
|
|
1258
1233
|
* {results['read:users'] && <UserList />}
|
|
1259
1234
|
* {results['create:users'] && <CreateUserButton />}
|
|
1260
1235
|
* {results['update:users'] && <EditUserButton />}
|
|
1261
|
-
*
|
|
1236
|
+
* </>
|
|
1262
1237
|
* );
|
|
1263
1238
|
* }
|
|
1264
1239
|
* ```
|
|
@@ -1289,14 +1264,14 @@ declare function useMultiplePermissions(userId: UUID, scope: Scope, permissions:
|
|
|
1289
1264
|
* appId
|
|
1290
1265
|
* );
|
|
1291
1266
|
*
|
|
1292
|
-
* if (isLoading) return
|
|
1293
|
-
* if (error) return <
|
|
1267
|
+
* if (isLoading) return null; // or use a loading component
|
|
1268
|
+
* if (error) return <Alert variant="destructive"><AlertDescription>Error: {error.message}</AlertDescription></Alert>;
|
|
1294
1269
|
*
|
|
1295
1270
|
* return (
|
|
1296
|
-
*
|
|
1271
|
+
* <>
|
|
1297
1272
|
* {permissions['read:users'] && <UserList />}
|
|
1298
1273
|
* {permissions['create:users'] && <CreateUserButton />}
|
|
1299
|
-
*
|
|
1274
|
+
* </>
|
|
1300
1275
|
* );
|
|
1301
1276
|
* }
|
|
1302
1277
|
* ```
|
|
@@ -1311,6 +1286,62 @@ declare function usePermissions(userId: UUID, organisationId: string | undefined
|
|
|
1311
1286
|
refetch: () => Promise<void>;
|
|
1312
1287
|
};
|
|
1313
1288
|
|
|
1289
|
+
/**
|
|
1290
|
+
* RBAC Role Management Types
|
|
1291
|
+
* @package @jmruthers/pace-core
|
|
1292
|
+
* @module RBAC/Types/RoleManagement
|
|
1293
|
+
* @since 2.1.0
|
|
1294
|
+
*
|
|
1295
|
+
* Types for role management RPC params and results (event app, global, organisation).
|
|
1296
|
+
*/
|
|
1297
|
+
|
|
1298
|
+
interface EventAppRoleData {
|
|
1299
|
+
user_id: UUID;
|
|
1300
|
+
organisation_id: UUID;
|
|
1301
|
+
event_id: string;
|
|
1302
|
+
app_id: UUID;
|
|
1303
|
+
role: 'viewer' | 'participant' | 'planner' | 'event_admin';
|
|
1304
|
+
}
|
|
1305
|
+
interface OrganisationRoleData {
|
|
1306
|
+
user_id: UUID;
|
|
1307
|
+
organisation_id: UUID;
|
|
1308
|
+
role: 'supporter' | 'member' | 'leader' | 'org_admin';
|
|
1309
|
+
}
|
|
1310
|
+
interface GlobalRoleData {
|
|
1311
|
+
user_id: UUID;
|
|
1312
|
+
role: 'super_admin';
|
|
1313
|
+
}
|
|
1314
|
+
interface RevokeEventAppRoleParams extends EventAppRoleData {
|
|
1315
|
+
revoked_by?: UUID;
|
|
1316
|
+
}
|
|
1317
|
+
interface GrantEventAppRoleParams extends EventAppRoleData {
|
|
1318
|
+
granted_by?: UUID;
|
|
1319
|
+
valid_from?: string;
|
|
1320
|
+
valid_to?: string | null;
|
|
1321
|
+
}
|
|
1322
|
+
interface RevokeOrganisationRoleParams extends OrganisationRoleData {
|
|
1323
|
+
revoked_by?: UUID;
|
|
1324
|
+
}
|
|
1325
|
+
interface GrantOrganisationRoleParams extends OrganisationRoleData {
|
|
1326
|
+
granted_by?: UUID;
|
|
1327
|
+
valid_from?: string;
|
|
1328
|
+
valid_to?: string | null;
|
|
1329
|
+
}
|
|
1330
|
+
interface RevokeGlobalRoleParams extends GlobalRoleData {
|
|
1331
|
+
revoked_by?: UUID;
|
|
1332
|
+
}
|
|
1333
|
+
interface GrantGlobalRoleParams extends GlobalRoleData {
|
|
1334
|
+
granted_by?: UUID;
|
|
1335
|
+
valid_from?: string;
|
|
1336
|
+
valid_to?: string | null;
|
|
1337
|
+
}
|
|
1338
|
+
interface RoleManagementResult {
|
|
1339
|
+
success: boolean;
|
|
1340
|
+
message?: string;
|
|
1341
|
+
error?: string;
|
|
1342
|
+
roleId?: UUID;
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1314
1345
|
/**
|
|
1315
1346
|
* @file RBAC Role Management Hook
|
|
1316
1347
|
* @package @jmruthers/pace-core
|
|
@@ -1324,6 +1355,7 @@ declare function usePermissions(userId: UUID, organisationId: string | undefined
|
|
|
1324
1355
|
* @example
|
|
1325
1356
|
* ```tsx
|
|
1326
1357
|
* import { useRoleManagement } from '@jmruthers/pace-core/rbac';
|
|
1358
|
+
* import { Button } from '@jmruthers/pace-core';
|
|
1327
1359
|
*
|
|
1328
1360
|
* function UserRolesComponent() {
|
|
1329
1361
|
* const {
|
|
@@ -1361,61 +1393,15 @@ declare function usePermissions(userId: UUID, organisationId: string | undefined
|
|
|
1361
1393
|
* };
|
|
1362
1394
|
*
|
|
1363
1395
|
* return (
|
|
1364
|
-
*
|
|
1365
|
-
* <
|
|
1366
|
-
* <
|
|
1367
|
-
*
|
|
1396
|
+
* <>
|
|
1397
|
+
* <Button onClick={handleGrantGlobalRole}>Grant Super Admin</Button>
|
|
1398
|
+
* <Button onClick={handleGrantOrgRole}>Grant Org Admin</Button>
|
|
1399
|
+
* </>
|
|
1368
1400
|
* );
|
|
1369
1401
|
* }
|
|
1370
1402
|
* ```
|
|
1371
1403
|
*/
|
|
1372
1404
|
|
|
1373
|
-
interface EventAppRoleData {
|
|
1374
|
-
user_id: UUID;
|
|
1375
|
-
organisation_id: UUID;
|
|
1376
|
-
event_id: string;
|
|
1377
|
-
app_id: UUID;
|
|
1378
|
-
role: 'viewer' | 'participant' | 'planner' | 'event_admin';
|
|
1379
|
-
}
|
|
1380
|
-
interface OrganisationRoleData {
|
|
1381
|
-
user_id: UUID;
|
|
1382
|
-
organisation_id: UUID;
|
|
1383
|
-
role: 'supporter' | 'member' | 'leader' | 'org_admin';
|
|
1384
|
-
}
|
|
1385
|
-
interface GlobalRoleData {
|
|
1386
|
-
user_id: UUID;
|
|
1387
|
-
role: 'super_admin';
|
|
1388
|
-
}
|
|
1389
|
-
interface RevokeEventAppRoleParams extends EventAppRoleData {
|
|
1390
|
-
revoked_by?: UUID;
|
|
1391
|
-
}
|
|
1392
|
-
interface GrantEventAppRoleParams extends EventAppRoleData {
|
|
1393
|
-
granted_by?: UUID;
|
|
1394
|
-
valid_from?: string;
|
|
1395
|
-
valid_to?: string | null;
|
|
1396
|
-
}
|
|
1397
|
-
interface RevokeOrganisationRoleParams extends OrganisationRoleData {
|
|
1398
|
-
revoked_by?: UUID;
|
|
1399
|
-
}
|
|
1400
|
-
interface GrantOrganisationRoleParams extends OrganisationRoleData {
|
|
1401
|
-
granted_by?: UUID;
|
|
1402
|
-
valid_from?: string;
|
|
1403
|
-
valid_to?: string | null;
|
|
1404
|
-
}
|
|
1405
|
-
interface RevokeGlobalRoleParams extends GlobalRoleData {
|
|
1406
|
-
revoked_by?: UUID;
|
|
1407
|
-
}
|
|
1408
|
-
interface GrantGlobalRoleParams extends GlobalRoleData {
|
|
1409
|
-
granted_by?: UUID;
|
|
1410
|
-
valid_from?: string;
|
|
1411
|
-
valid_to?: string | null;
|
|
1412
|
-
}
|
|
1413
|
-
interface RoleManagementResult {
|
|
1414
|
-
success: boolean;
|
|
1415
|
-
message?: string;
|
|
1416
|
-
error?: string;
|
|
1417
|
-
roleId?: UUID;
|
|
1418
|
-
}
|
|
1419
1405
|
declare function useRoleManagement(): {
|
|
1420
1406
|
revokeEventAppRole: (params: RevokeEventAppRoleParams) => Promise<RoleManagementResult>;
|
|
1421
1407
|
grantEventAppRole: (params: GrantEventAppRoleParams) => Promise<RoleManagementResult>;
|
|
@@ -1464,7 +1450,7 @@ declare function useRoleManagement(): {
|
|
|
1464
1450
|
* const supabase = useSecureSupabase();
|
|
1465
1451
|
*
|
|
1466
1452
|
* if (!supabase) {
|
|
1467
|
-
* return
|
|
1453
|
+
* return null; // or use a loading component
|
|
1468
1454
|
* }
|
|
1469
1455
|
*
|
|
1470
1456
|
* const fetchData = async () => {
|
|
@@ -1474,7 +1460,7 @@ declare function useRoleManagement(): {
|
|
|
1474
1460
|
* // Organisation context is automatically injected
|
|
1475
1461
|
* };
|
|
1476
1462
|
*
|
|
1477
|
-
* return
|
|
1463
|
+
* return <>...</>;
|
|
1478
1464
|
* }
|
|
1479
1465
|
* ```
|
|
1480
1466
|
*
|
|
@@ -1566,7 +1552,7 @@ declare function useRoleManagement(): {
|
|
|
1566
1552
|
* const supabase = useSecureSupabase();
|
|
1567
1553
|
*
|
|
1568
1554
|
* if (!supabase) {
|
|
1569
|
-
* return
|
|
1555
|
+
* return null; // or use a loading component
|
|
1570
1556
|
* }
|
|
1571
1557
|
*
|
|
1572
1558
|
* // Use supabase client - organisation context is automatically injected
|
|
@@ -1592,6 +1578,18 @@ declare function useSecureSupabase(baseClient?: SupabaseClient<Database> | null)
|
|
|
1592
1578
|
* These are optional utilities for server-side applications.
|
|
1593
1579
|
*/
|
|
1594
1580
|
|
|
1581
|
+
/**
|
|
1582
|
+
* Request interface for server handlers
|
|
1583
|
+
* Used by permission and access level guards
|
|
1584
|
+
*/
|
|
1585
|
+
interface ServerRequest {
|
|
1586
|
+
user?: {
|
|
1587
|
+
id: string;
|
|
1588
|
+
};
|
|
1589
|
+
organisationId?: string;
|
|
1590
|
+
eventId?: string;
|
|
1591
|
+
appId?: string;
|
|
1592
|
+
}
|
|
1595
1593
|
/**
|
|
1596
1594
|
* Permission Guard for Server Handlers
|
|
1597
1595
|
*
|
|
@@ -1612,10 +1610,10 @@ declare function useSecureSupabase(baseClient?: SupabaseClient<Database> | null)
|
|
|
1612
1610
|
* );
|
|
1613
1611
|
* ```
|
|
1614
1612
|
*/
|
|
1615
|
-
declare function withPermissionGuard<T extends
|
|
1613
|
+
declare function withPermissionGuard<T extends readonly [ServerRequest, ...unknown[]], R>(config: {
|
|
1616
1614
|
permission: Permission;
|
|
1617
1615
|
pageId?: UUID;
|
|
1618
|
-
}, handler: (...args: T) => Promise<
|
|
1616
|
+
}, handler: (...args: T) => Promise<R>): (...args: T) => Promise<R>;
|
|
1619
1617
|
/**
|
|
1620
1618
|
* Access Level Guard for Server Handlers
|
|
1621
1619
|
*
|
|
@@ -1636,7 +1634,7 @@ declare function withPermissionGuard<T extends any[]>(config: {
|
|
|
1636
1634
|
* );
|
|
1637
1635
|
* ```
|
|
1638
1636
|
*/
|
|
1639
|
-
declare function withAccessLevelGuard<T extends
|
|
1637
|
+
declare function withAccessLevelGuard<T extends readonly [ServerRequest, ...unknown[]], R>(minLevel: 'viewer' | 'participant' | 'planner' | 'admin' | 'super', handler: (...args: T) => Promise<R>): (...args: T) => Promise<R>;
|
|
1640
1638
|
/**
|
|
1641
1639
|
* Role Guard for Server Handlers
|
|
1642
1640
|
*
|
|
@@ -1662,12 +1660,12 @@ declare function withAccessLevelGuard<T extends any[]>(minLevel: 'viewer' | 'par
|
|
|
1662
1660
|
* );
|
|
1663
1661
|
* ```
|
|
1664
1662
|
*/
|
|
1665
|
-
declare function withRoleGuard<T extends
|
|
1663
|
+
declare function withRoleGuard<T extends readonly [ServerRequest, ...unknown[]], R>(config: {
|
|
1666
1664
|
globalRoles?: string[];
|
|
1667
1665
|
organisationRoles?: string[];
|
|
1668
1666
|
eventAppRoles?: string[];
|
|
1669
1667
|
requireAll?: boolean;
|
|
1670
|
-
}, handler: (...args: T) => Promise<
|
|
1668
|
+
}, handler: (...args: T) => Promise<R>): (...args: T) => Promise<R>;
|
|
1671
1669
|
/**
|
|
1672
1670
|
* Next.js Middleware for RBAC
|
|
1673
1671
|
*
|
|
@@ -1758,6 +1756,12 @@ declare function createRBACExpressMiddleware(config: {
|
|
|
1758
1756
|
* @param config - Optional configuration
|
|
1759
1757
|
*/
|
|
1760
1758
|
declare function setupRBAC(supabase: SupabaseClient<Database>, config?: Partial<RBACConfig>): void;
|
|
1759
|
+
/**
|
|
1760
|
+
* Check if RBAC system is initialized
|
|
1761
|
+
*
|
|
1762
|
+
* @returns True if RBAC is initialized
|
|
1763
|
+
*/
|
|
1764
|
+
declare function isRBACInitialized(): boolean;
|
|
1761
1765
|
/**
|
|
1762
1766
|
* Get user's access level in a scope
|
|
1763
1767
|
*
|
|
@@ -1777,7 +1781,7 @@ declare function setupRBAC(supabase: SupabaseClient<Database>, config?: Partial<
|
|
|
1777
1781
|
declare function getAccessLevel(input: {
|
|
1778
1782
|
userId: UUID;
|
|
1779
1783
|
scope: Scope;
|
|
1780
|
-
}, appName?: string): Promise<AccessLevel
|
|
1784
|
+
}, appName?: string): Promise<ApiResult<AccessLevel>>;
|
|
1781
1785
|
/**
|
|
1782
1786
|
* Get user's permission map for a scope
|
|
1783
1787
|
*
|
|
@@ -1801,15 +1805,15 @@ declare function getAccessLevel(input: {
|
|
|
1801
1805
|
declare function getPermissionMap(input: {
|
|
1802
1806
|
userId: UUID;
|
|
1803
1807
|
scope: Scope;
|
|
1804
|
-
}, appName?: string): Promise<PermissionMap
|
|
1808
|
+
}, appName?: string): Promise<ApiResult<PermissionMap>>;
|
|
1805
1809
|
declare function resolveAppContext(input: {
|
|
1806
1810
|
userId: UUID;
|
|
1807
1811
|
appName: string;
|
|
1808
|
-
}): Promise<RBACAppContext | null
|
|
1812
|
+
}): Promise<ApiResult<RBACAppContext | null>>;
|
|
1809
1813
|
declare function getRoleContext(input: {
|
|
1810
1814
|
userId: UUID;
|
|
1811
1815
|
scope: Scope;
|
|
1812
|
-
}, appName?: string): Promise<RBACRoleContext
|
|
1816
|
+
}, appName?: string): Promise<ApiResult<RBACRoleContext>>;
|
|
1813
1817
|
/**
|
|
1814
1818
|
* Check if user has a specific permission
|
|
1815
1819
|
*
|
|
@@ -1835,7 +1839,7 @@ declare function isPermitted(input: PermissionCheck, appName?: string,
|
|
|
1835
1839
|
* or false if already checked and is not super admin.
|
|
1836
1840
|
* @default null
|
|
1837
1841
|
*/
|
|
1838
|
-
precomputedSuperAdmin?: boolean | null): Promise<boolean
|
|
1842
|
+
precomputedSuperAdmin?: boolean | null): Promise<ApiResult<boolean>>;
|
|
1839
1843
|
/**
|
|
1840
1844
|
* Check if user has a specific permission (cached version)
|
|
1841
1845
|
*
|
|
@@ -1846,7 +1850,7 @@ precomputedSuperAdmin?: boolean | null): Promise<boolean>;
|
|
|
1846
1850
|
* @param appName - Optional app name (for PORTAL/ADMIN special case)
|
|
1847
1851
|
* @returns Promise resolving to permission result
|
|
1848
1852
|
*/
|
|
1849
|
-
declare function isPermittedCached(input: PermissionCheck, appName?: string): Promise<boolean
|
|
1853
|
+
declare function isPermittedCached(input: PermissionCheck, appName?: string): Promise<ApiResult<boolean>>;
|
|
1850
1854
|
/**
|
|
1851
1855
|
* Check if user has any of the specified permissions
|
|
1852
1856
|
*
|
|
@@ -1858,7 +1862,7 @@ declare function hasAnyPermission(input: {
|
|
|
1858
1862
|
scope: Scope;
|
|
1859
1863
|
permissions: Permission[];
|
|
1860
1864
|
pageId?: UUID;
|
|
1861
|
-
}): Promise<boolean
|
|
1865
|
+
}): Promise<ApiResult<boolean>>;
|
|
1862
1866
|
/**
|
|
1863
1867
|
* Check if user has all of the specified permissions
|
|
1864
1868
|
*
|
|
@@ -1870,7 +1874,7 @@ declare function hasAllPermissions(input: {
|
|
|
1870
1874
|
scope: Scope;
|
|
1871
1875
|
permissions: Permission[];
|
|
1872
1876
|
pageId?: UUID;
|
|
1873
|
-
}): Promise<boolean
|
|
1877
|
+
}): Promise<ApiResult<boolean>>;
|
|
1874
1878
|
|
|
1875
1879
|
/**
|
|
1876
1880
|
* RBAC Permissions Definitions
|
|
@@ -2035,179 +2039,4 @@ declare const ALL_PERMISSIONS: {
|
|
|
2035
2039
|
};
|
|
2036
2040
|
type AllPermissions = typeof ALL_PERMISSIONS;
|
|
2037
2041
|
|
|
2038
|
-
|
|
2039
|
-
* RBAC Setup Validator
|
|
2040
|
-
* @package @jmruthers/pace-core
|
|
2041
|
-
* @module RBAC/Compliance/SetupValidator
|
|
2042
|
-
* @since 1.0.0
|
|
2043
|
-
*
|
|
2044
|
-
* This module provides utilities to validate RBAC setup state.
|
|
2045
|
-
*/
|
|
2046
|
-
interface SetupIssue {
|
|
2047
|
-
type: 'not-initialized' | 'missing-config' | 'invalid-config' | 'missing-provider-context';
|
|
2048
|
-
message: string;
|
|
2049
|
-
recommendation: string;
|
|
2050
|
-
}
|
|
2051
|
-
interface ComplianceResult {
|
|
2052
|
-
isCompliant: boolean;
|
|
2053
|
-
issues: SetupIssue[];
|
|
2054
|
-
}
|
|
2055
|
-
/**
|
|
2056
|
-
* Check if RBAC system is initialized
|
|
2057
|
-
*
|
|
2058
|
-
* @returns true if RBAC is initialized, false otherwise
|
|
2059
|
-
*/
|
|
2060
|
-
declare function isRBACInitialized(): boolean;
|
|
2061
|
-
/**
|
|
2062
|
-
* Get setup issues
|
|
2063
|
-
*
|
|
2064
|
-
* @returns Array of setup issues
|
|
2065
|
-
*/
|
|
2066
|
-
declare function getSetupIssues(): SetupIssue[];
|
|
2067
|
-
/**
|
|
2068
|
-
* Validate RBAC setup
|
|
2069
|
-
*
|
|
2070
|
-
* @returns Compliance result with issues and recommendations
|
|
2071
|
-
*/
|
|
2072
|
-
declare function validateRBACSetup(): ComplianceResult;
|
|
2073
|
-
|
|
2074
|
-
/**
|
|
2075
|
-
* Pattern Detector for RBAC Compliance
|
|
2076
|
-
* @package @jmruthers/pace-core
|
|
2077
|
-
* @module RBAC/Compliance/PatternDetector
|
|
2078
|
-
* @since 1.0.0
|
|
2079
|
-
*
|
|
2080
|
-
* This module provides static and runtime pattern detection for RBAC violations.
|
|
2081
|
-
* It detects direct RPC calls, direct table queries, and other non-standard patterns.
|
|
2082
|
-
*/
|
|
2083
|
-
interface PatternViolation {
|
|
2084
|
-
type: 'direct-rpc-call' | 'direct-table-query' | 'bypass-pattern' | 'custom-component' | 'hardcoded-role-check' | 'custom-permission-utility' | 'ui-only-access-control' | 'permission-bypass-comment' | 'resource-permission-string-literal' | 'permission-wrapper-function';
|
|
2085
|
-
file?: string;
|
|
2086
|
-
line?: number;
|
|
2087
|
-
message: string;
|
|
2088
|
-
recommendation: string;
|
|
2089
|
-
}
|
|
2090
|
-
interface PatternDetectionResult {
|
|
2091
|
-
violations: PatternViolation[];
|
|
2092
|
-
isCompliant: boolean;
|
|
2093
|
-
summary: {
|
|
2094
|
-
directRpcCalls: number;
|
|
2095
|
-
directTableQueries: number;
|
|
2096
|
-
bypassPatterns: number;
|
|
2097
|
-
customComponents: number;
|
|
2098
|
-
hardcodedRoleChecks: number;
|
|
2099
|
-
customPermissionUtilities: number;
|
|
2100
|
-
uiOnlyAccessControl: number;
|
|
2101
|
-
permissionBypassComments: number;
|
|
2102
|
-
resourcePermissionStringLiterals: number;
|
|
2103
|
-
permissionWrapperFunctions: number;
|
|
2104
|
-
};
|
|
2105
|
-
}
|
|
2106
|
-
|
|
2107
|
-
/**
|
|
2108
|
-
* Runtime Compliance Checking
|
|
2109
|
-
* @package @jmruthers/pace-core
|
|
2110
|
-
* @module RBAC/Compliance/RuntimeCompliance
|
|
2111
|
-
* @since 1.0.0
|
|
2112
|
-
*
|
|
2113
|
-
* This module provides runtime compliance checking utilities.
|
|
2114
|
-
*/
|
|
2115
|
-
|
|
2116
|
-
interface RuntimeComplianceResult {
|
|
2117
|
-
setup: {
|
|
2118
|
-
isCompliant: boolean;
|
|
2119
|
-
issues: SetupIssue[];
|
|
2120
|
-
};
|
|
2121
|
-
warnings: string[];
|
|
2122
|
-
providerContext?: {
|
|
2123
|
-
available: boolean;
|
|
2124
|
-
message?: string;
|
|
2125
|
-
};
|
|
2126
|
-
patternDetection?: PatternDetectionResult;
|
|
2127
|
-
}
|
|
2128
|
-
/**
|
|
2129
|
-
* Check runtime compliance
|
|
2130
|
-
*
|
|
2131
|
-
* This function checks if the RBAC system is properly set up and logs warnings
|
|
2132
|
-
* to the console if issues are found. This is intended for development-time
|
|
2133
|
-
* validation only.
|
|
2134
|
-
*
|
|
2135
|
-
* @returns Runtime compliance result
|
|
2136
|
-
*/
|
|
2137
|
-
declare function checkRuntimeCompliance(): RuntimeComplianceResult;
|
|
2138
|
-
/**
|
|
2139
|
-
* Validate and warn about RBAC setup issues
|
|
2140
|
-
*
|
|
2141
|
-
* This is a convenience function that checks compliance and logs warnings.
|
|
2142
|
-
* Call this in development mode to get early warnings about setup issues.
|
|
2143
|
-
*/
|
|
2144
|
-
declare function validateAndWarn(): void;
|
|
2145
|
-
|
|
2146
|
-
/**
|
|
2147
|
-
* Database Configuration Validator
|
|
2148
|
-
* @package @jmruthers/pace-core
|
|
2149
|
-
* @module RBAC/Compliance/DatabaseValidator
|
|
2150
|
-
* @since 1.0.0
|
|
2151
|
-
*
|
|
2152
|
-
* This module provides utilities to validate database configuration for RBAC.
|
|
2153
|
-
*/
|
|
2154
|
-
|
|
2155
|
-
interface DatabaseIssue {
|
|
2156
|
-
type: 'app-not-configured' | 'app-name-mismatch' | 'pages-not-configured' | 'permissions-not-configured' | 'rls-not-active' | 'roles-not-configured';
|
|
2157
|
-
message: string;
|
|
2158
|
-
recommendation: string;
|
|
2159
|
-
}
|
|
2160
|
-
interface DatabaseComplianceResult {
|
|
2161
|
-
appConfigured: boolean;
|
|
2162
|
-
pagesConfigured: boolean;
|
|
2163
|
-
permissionsConfigured: boolean;
|
|
2164
|
-
rlsPoliciesActive: boolean;
|
|
2165
|
-
rolesConfigured: boolean;
|
|
2166
|
-
issues: DatabaseIssue[];
|
|
2167
|
-
recommendations: string[];
|
|
2168
|
-
}
|
|
2169
|
-
/**
|
|
2170
|
-
* Validate database configuration
|
|
2171
|
-
*
|
|
2172
|
-
* @param supabase - Supabase client
|
|
2173
|
-
* @param appName - Application name to validate
|
|
2174
|
-
* @returns Database compliance result
|
|
2175
|
-
*/
|
|
2176
|
-
declare function validateDatabaseConfiguration(supabase: SupabaseClient<Database>, appName: string): Promise<DatabaseComplianceResult>;
|
|
2177
|
-
|
|
2178
|
-
/**
|
|
2179
|
-
* Quick Fix Suggestions for RBAC/Auth Compliance
|
|
2180
|
-
* @package @jmruthers/pace-core
|
|
2181
|
-
* @module RBAC/Compliance/QuickFixSuggestions
|
|
2182
|
-
* @since 1.0.0
|
|
2183
|
-
*
|
|
2184
|
-
* This module provides auto-suggest fixes for common RBAC/auth compliance issues.
|
|
2185
|
-
*/
|
|
2186
|
-
interface QuickFix {
|
|
2187
|
-
issue: string;
|
|
2188
|
-
suggestion: string;
|
|
2189
|
-
codeExample?: string;
|
|
2190
|
-
migrationSteps?: string[];
|
|
2191
|
-
}
|
|
2192
|
-
/**
|
|
2193
|
-
* Get quick fix suggestions for custom auth code
|
|
2194
|
-
*/
|
|
2195
|
-
declare function getCustomAuthCodeFixes(customCodeName: string, type: 'hook' | 'component' | 'util'): QuickFix;
|
|
2196
|
-
/**
|
|
2197
|
-
* Get quick fix suggestions for duplicate Supabase config
|
|
2198
|
-
*/
|
|
2199
|
-
declare function getDuplicateConfigFixes(): QuickFix;
|
|
2200
|
-
/**
|
|
2201
|
-
* Get quick fix suggestions for unprotected pages
|
|
2202
|
-
*/
|
|
2203
|
-
declare function getUnprotectedPageFixes(): QuickFix;
|
|
2204
|
-
/**
|
|
2205
|
-
* Get quick fix suggestions for direct Supabase auth usage
|
|
2206
|
-
*/
|
|
2207
|
-
declare function getDirectSupabaseAuthFixes(): QuickFix;
|
|
2208
|
-
/**
|
|
2209
|
-
* Get all quick fix suggestions for a compliance issue
|
|
2210
|
-
*/
|
|
2211
|
-
declare function getQuickFixes(issueType: string, details?: Record<string, any>): QuickFix[];
|
|
2212
|
-
|
|
2213
|
-
export { ALL_PERMISSIONS, AccessDenied, type AccessDeniedProps, AccessLevel, type AllPermissions, CACHE_PATTERNS, type ComplianceResult, type DatabaseComplianceResult, type DatabaseIssue, EVENT_APP_PERMISSIONS, type EventAppRoleData, GLOBAL_PERMISSIONS, type GrantEventAppRoleParams, type LogLevel, NavigationGuard, type NavigationGuardProps, ORGANISATION_PERMISSIONS, PAGE_PERMISSIONS, PagePermissionGuard, type PagePermissionGuardProps, Permission, PermissionCheck, PermissionMap, type QuickFix, RBACAuditManager, RBACCache, type RBACConfig, RBACEngine, type RBACLogger, type RBACPerformanceMetrics, type ResourcePermissions, type RevokeEventAppRoleParams, type RoleManagementResult, type RuntimeComplianceResult, SECURE_CLIENT_SYMBOL, Scope, 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, isDebugMode, isDevelopmentMode, isPerformanceMonitoringEnabled, isPermitted, isPermittedCached, isRBACInitialized, isSecureClient, isValidPermission, rbacCache, recordAuditEvent, recordPermissionCheck, resetPerformanceMetrics, resolveAppContext, setGlobalAuditManager, setupRBAC, useAccessLevel, useCan, useMultiplePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleManagement, useSecureSupabase, validateAndWarn, validateDatabaseConfiguration, validateRBACSetup, warnIfInsecureClient, withAccessLevelGuard, withPermissionGuard, withRoleGuard };
|
|
2042
|
+
export { ALL_PERMISSIONS, AccessDenied, type AccessDeniedProps, AccessLevel, type AllPermissions, CACHE_PATTERNS, EVENT_APP_PERMISSIONS, type EventAppRoleData, GLOBAL_PERMISSIONS, type GrantEventAppRoleParams, type LogLevel, NavigationGuard, type NavigationGuardProps, ORGANISATION_PERMISSIONS, PAGE_PERMISSIONS, PagePermissionGuard, type PagePermissionGuardProps, Permission, PermissionCheck, PermissionMap, RBACAuditManager, RBACCache, type RBACConfig, RBACEngine, type RBACLogger, type RBACPerformanceMetrics, type ResourcePermissions, type RevokeEventAppRoleParams, type RoleManagementResult, SECURE_CLIENT_SYMBOL, Scope, SecureSupabaseClient, UUID, type UseResolvedScopeOptions, type UseResolvedScopeReturn, type UseResourcePermissionsOptions, clearInFlightRequests, createAuditManager, createRBACConfig, createRBACEngine, createRBACExpressMiddleware, createRBACMiddleware, createSecureClient, disablePerformanceMonitoring, emitAuditEvent, enablePerformanceMonitoring, fromSupabaseClient, getAccessLevel, getGlobalAuditManager, getInFlightRequestCount, getPerformanceMetrics, getPerformanceSummary, getPermissionMap, getRBACConfig, getRBACLogger, getRoleContext, hasAllPermissions, hasAnyPermission, isDebugMode, isDevelopmentMode, isPerformanceMonitoringEnabled, isPermitted, isPermittedCached, isRBACInitialized, isSecureClient, isValidPermission, rbacCache, recordAuditEvent, recordPermissionCheck, resetPerformanceMetrics, resolveAppContext, setGlobalAuditManager, setupRBAC, useAccessLevel, useCan, useMultiplePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleManagement, useSecureSupabase, warnIfInsecureClient, withAccessLevelGuard, withPermissionGuard, withRoleGuard };
|