@jmruthers/pace-core 0.6.4 → 0.6.6
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 +104 -0
- package/README.md +5 -403
- package/core-usage-manifest.json +93 -0
- package/cursor-rules/00-pace-core-compliance.mdc +128 -26
- package/cursor-rules/01-standards-compliance.mdc +49 -8
- package/cursor-rules/02-project-structure.mdc +6 -0
- package/cursor-rules/03-solid-principles.mdc +2 -0
- package/cursor-rules/04-testing-standards.mdc +2 -0
- package/cursor-rules/05-bug-reports-and-features.mdc +2 -0
- package/cursor-rules/06-code-quality.mdc +2 -0
- package/cursor-rules/07-tech-stack-compliance.mdc +2 -0
- package/cursor-rules/08-markup-quality.mdc +52 -27
- package/cursor-rules/09-rbac-compliance.mdc +462 -0
- package/cursor-rules/10-error-handling-patterns.mdc +179 -0
- package/cursor-rules/11-performance-optimization.mdc +169 -0
- package/cursor-rules/12-ci-cd-integration.mdc +150 -0
- package/dist/{AuthService-Cb34EQs3.d.ts → AuthService-DmfO5rGS.d.ts} +10 -0
- package/dist/{DataTable-BMRU8a1j.d.ts → DataTable-2N_tqbfq.d.ts} +1 -1
- package/dist/DataTable-LRJL4IRV.js +15 -0
- package/dist/{PublicPageProvider-DEMpysFR.d.ts → PublicPageProvider-BBH6Vqg7.d.ts} +72 -139
- package/dist/UnifiedAuthProvider-ZT6TIGM7.js +7 -0
- package/dist/api-Y4MQWOFW.js +4 -0
- package/dist/audit-MYQXYZFU.js +3 -0
- package/dist/{chunk-J36DSWQK.js → chunk-2HGJFNAH.js} +8 -28
- package/dist/{chunk-OEWDTMG7.js → chunk-3O3WHILE.js} +38 -121
- package/dist/{chunk-M43Y4SSO.js → chunk-3QC3KRHK.js} +1 -14
- package/dist/{chunk-DGUM43GV.js → chunk-3RG5ZIWI.js} +1 -4
- package/dist/{chunk-QXHPKYJV.js → chunk-4SXLQIZO.js} +1 -26
- package/dist/chunk-4T7OBVTU.js +62 -0
- package/dist/{chunk-E66EQZE6.js → chunk-6GLLNA6U.js} +3 -9
- package/dist/{chunk-ZSAAAMVR.js → chunk-6QYDGKQY.js} +1 -4
- package/dist/{chunk-NN6WWZ5U.js → chunk-7TYHROIV.js} +579 -563
- package/dist/{chunk-M7MPQISP.js → chunk-A55DK444.js} +9 -16
- package/dist/{chunk-63FOKYGO.js → chunk-AHU7G2R5.js} +2 -11
- package/dist/{chunk-L4OXEN46.js → chunk-BVP2BCJF.js} +2 -16
- package/dist/chunk-C7NSAPTL.js +1 -0
- package/dist/{chunk-YKRAFF5K.js → chunk-FENMYN2U.js} +73 -149
- package/dist/{chunk-AVMLPIM7.js → chunk-FTCRZOG2.js} +284 -432
- package/dist/{chunk-G37KK66H.js → chunk-FYHN4DD5.js} +60 -19
- package/dist/{chunk-VBXEHIUJ.js → chunk-HF6O3O37.js} +6 -88
- package/dist/{chunk-I6DAQMWX.js → chunk-LAZMKTTF.js} +930 -891
- package/dist/{chunk-5EC5MEWX.js → chunk-MAGBIDNS.js} +77 -222
- package/dist/chunk-MBADTM7L.js +64 -0
- package/dist/chunk-OHIK3MIO.js +994 -0
- package/dist/{chunk-6SOIHG6Z.js → chunk-S7DKJPLT.js} +115 -44
- package/dist/{chunk-FMUCXFII.js → chunk-SD6WQY43.js} +1 -5
- package/dist/{chunk-PWLANIRT.js → chunk-TTRFSOKR.js} +1 -7
- package/dist/{chunk-5DRSZLL2.js → chunk-UH3NTO3F.js} +1 -6
- package/dist/{chunk-FFQEQTNW.js → chunk-UIYSCEV7.js} +134 -45
- package/dist/{chunk-3LPHPB62.js → chunk-ZFYPMX46.js} +271 -87
- package/dist/{chunk-7JPAB3T5.js → chunk-ZS5VO5JB.js} +1989 -1283
- package/dist/components.d.ts +6 -6
- package/dist/components.js +57 -267
- package/dist/{database.generated-CzIvgcPu.d.ts → database.generated-CcnC_DRc.d.ts} +4795 -3691
- package/dist/eslint-rules/index.cjs +22 -0
- package/dist/eslint-rules/rules/compliance.cjs +348 -0
- package/dist/eslint-rules/rules/components.cjs +113 -0
- package/dist/eslint-rules/rules/imports.cjs +102 -0
- package/dist/eslint-rules/rules/rbac.cjs +790 -0
- package/dist/eslint-rules/utils/helpers.cjs +42 -0
- package/dist/eslint-rules/utils/manifest-loader.cjs +75 -0
- package/dist/hooks.d.ts +5 -5
- package/dist/hooks.js +62 -270
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.js +1 -0
- package/dist/index.d.ts +36 -26
- package/dist/index.js +87 -690
- package/dist/providers.d.ts +2 -2
- package/dist/providers.js +8 -35
- package/dist/rbac/eslint-rules.d.ts +46 -44
- package/dist/rbac/eslint-rules.js +7 -4
- package/dist/rbac/index.d.ts +124 -594
- package/dist/rbac/index.js +14 -207
- package/dist/styles/index.js +2 -12
- package/dist/theming/runtime.js +3 -19
- package/dist/{timezone-CHhWg6b4.d.ts → timezone-BZe_eUxx.d.ts} +175 -1
- package/dist/{types-CkbwOr4Y.d.ts → types-B-K_5VnO.d.ts} +4 -0
- package/dist/types-t9H8qKRw.d.ts +55 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js +7 -94
- package/dist/{usePublicRouteParams-i3qtoBgg.d.ts → usePublicRouteParams-COZ28Mvq.d.ts} +9 -9
- package/dist/utils.d.ts +24 -117
- package/dist/utils.js +54 -392
- package/docs/README.md +16 -6
- package/docs/api/README.md +4 -402
- package/docs/api/modules.md +454 -930
- package/docs/api-reference/components.md +3 -1
- package/docs/api-reference/deprecated.md +31 -6
- package/docs/api-reference/rpc-functions.md +78 -3
- package/docs/best-practices/accessibility.md +6 -3
- package/docs/getting-started/cursor-rules.md +3 -23
- package/docs/getting-started/dependencies.md +650 -0
- package/docs/getting-started/installation-guide.md +20 -7
- package/docs/getting-started/quick-start.md +23 -12
- package/docs/implementation-guides/permission-enforcement.md +4 -0
- package/docs/rbac/MIGRATION_GUIDE.md +819 -0
- package/docs/rbac/RBAC_CONTRACT.md +724 -0
- package/docs/rbac/README.md +12 -3
- package/docs/rbac/edge-functions-guide.md +376 -0
- package/docs/rbac/secure-client-protection.md +0 -34
- package/docs/standards/00-pace-core-compliance.md +967 -0
- package/docs/standards/01-standards-compliance.md +188 -0
- package/docs/standards/02-project-structure.md +985 -0
- package/docs/standards/03-solid-principles.md +39 -0
- package/docs/standards/04-testing-standards.md +36 -0
- package/docs/standards/05-bug-reports-and-features.md +27 -0
- package/docs/standards/{04-code-style-standard.md → 06-code-quality.md} +2 -0
- package/docs/standards/07-tech-stack-compliance.md +30 -0
- package/docs/standards/08-markup-quality.md +345 -0
- package/docs/standards/{07-rbac-and-rls-standard.md → 09-rbac-compliance.md} +149 -54
- package/docs/standards/10-error-handling-patterns.md +401 -0
- package/docs/standards/11-performance-optimization.md +348 -0
- package/docs/standards/12-ci-cd-integration.md +370 -0
- package/docs/standards/ALIGNMENT_REVIEW_SUMMARY.md +192 -0
- package/docs/standards/README.md +62 -33
- package/docs/troubleshooting/organisation-context-setup.md +42 -19
- package/eslint-config-pace-core.cjs +20 -4
- package/package.json +31 -21
- package/scripts/audit/audit-compliance.cjs +1295 -0
- package/scripts/audit/audit-components.cjs +260 -0
- package/scripts/audit/audit-dependencies.cjs +395 -0
- package/scripts/audit/audit-rbac.cjs +954 -0
- package/scripts/audit/audit-standards.cjs +1268 -0
- package/scripts/audit/index.cjs +1898 -194
- package/scripts/install-cursor-rules.cjs +259 -8
- package/scripts/validate-master.js +1 -1
- package/src/__tests__/fixtures/supabase.ts +1 -1
- package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +1 -1
- package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +1 -1
- package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +1 -1
- package/src/__tests__/helpers/__tests__/test-utils.test.tsx +3 -3
- package/src/__tests__/helpers/component-test-utils.tsx +1 -1
- package/src/__tests__/helpers/supabaseMock.ts +2 -2
- package/src/__tests__/public-recipe-view.test.ts +38 -9
- package/src/components/Button/Button.tsx +5 -1
- package/src/components/ContextSelector/ContextSelector.tsx +42 -39
- package/src/components/DataTable/__tests__/keyboard.test.tsx +15 -2
- package/src/components/DataTable/components/DataTableBody.tsx +55 -31
- package/src/components/DataTable/components/DataTableCore.tsx +186 -13
- package/src/components/DataTable/components/DataTableLayout.tsx +30 -5
- package/src/components/DataTable/components/EditFields.tsx +23 -3
- package/src/components/DataTable/components/EditableRow.tsx +7 -2
- package/src/components/DataTable/components/ImportModal.tsx +4 -6
- package/src/components/DataTable/components/RowComponent.tsx +12 -0
- package/src/components/DataTable/components/ViewRowModal.tsx +4 -4
- package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +455 -96
- package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +122 -58
- package/src/components/DataTable/components/hooks/usePermissionTracking.ts +0 -4
- package/src/components/DataTable/core/DataTableContext.tsx +1 -1
- package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +51 -47
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +24 -21
- package/src/components/DataTable/hooks/useDataTableState.ts +125 -9
- package/src/components/DataTable/hooks/useTableColumns.ts +40 -2
- package/src/components/DataTable/hooks/useTableHandlers.ts +11 -0
- package/src/components/DataTable/types.ts +5 -0
- package/src/components/DateTimeField/DateTimeField.tsx +20 -20
- package/src/components/DateTimeField/README.md +5 -2
- package/src/components/Dialog/Dialog.test.tsx +361 -318
- package/src/components/Dialog/Dialog.tsx +1154 -323
- package/src/components/Dialog/index.ts +3 -3
- package/src/components/FileDisplay/FileDisplay.test.tsx +45 -2
- package/src/components/FileDisplay/FileDisplay.tsx +28 -22
- package/src/components/Form/Form.test.tsx +9 -10
- package/src/components/Form/Form.tsx +369 -9
- package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +28 -28
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +40 -54
- package/src/components/LoginForm/LoginForm.tsx +2 -2
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +14 -13
- package/src/components/NavigationMenu/NavigationMenu.tsx +2 -2
- package/src/components/NavigationMenu/useNavigationFiltering.ts +11 -21
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +6 -4
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +30 -41
- package/src/components/PaceAppLayout/README.md +10 -9
- package/src/components/PaceAppLayout/test-setup.tsx +40 -31
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +108 -61
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +27 -3
- package/src/components/PasswordChange/PasswordChangeForm.test.tsx +61 -0
- package/src/components/PasswordChange/PasswordChangeForm.tsx +20 -13
- package/src/components/PublicLayout/PublicLayout.test.tsx +7 -3
- package/src/components/PublicLayout/PublicPageLayout.tsx +5 -8
- package/src/components/Select/Select.tsx +23 -21
- package/src/components/Select/types.ts +1 -1
- package/src/components/UserMenu/UserMenu.test.tsx +38 -6
- package/src/components/UserMenu/UserMenu.tsx +39 -34
- package/src/components/index.ts +3 -4
- package/src/eslint-rules/index.cjs +22 -0
- package/src/eslint-rules/rules/compliance.cjs +348 -0
- package/src/eslint-rules/rules/components.cjs +113 -0
- package/src/eslint-rules/rules/imports.cjs +102 -0
- package/src/eslint-rules/rules/rbac.cjs +790 -0
- package/src/eslint-rules/utils/helpers.cjs +42 -0
- package/src/eslint-rules/utils/manifest-loader.cjs +75 -0
- package/src/hooks/__tests__/hooks.integration.test.tsx +6 -8
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +129 -67
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +149 -67
- package/src/hooks/__tests__/usePublicEvent.test.ts +149 -79
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +158 -109
- package/src/hooks/__tests__/useSessionDraft.test.ts +163 -0
- package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +10 -5
- package/src/hooks/public/usePublicEvent.ts +62 -190
- package/src/hooks/public/usePublicEventLogo.test.ts +70 -17
- package/src/hooks/public/usePublicEventLogo.ts +19 -9
- package/src/hooks/useAppConfig.ts +26 -24
- package/src/hooks/useEventTheme.test.ts +211 -233
- package/src/hooks/useEventTheme.ts +19 -28
- package/src/hooks/useEvents.ts +11 -7
- package/src/hooks/useKeyboardShortcuts.ts +1 -1
- package/src/hooks/useOrganisationPermissions.ts +9 -11
- package/src/hooks/useOrganisations.ts +13 -7
- package/src/hooks/useQueryCache.ts +0 -1
- package/src/hooks/useSessionDraft.ts +380 -0
- package/src/hooks/useSessionRestoration.ts +3 -1
- package/src/icons/index.ts +27 -0
- package/src/index.ts +16 -1
- package/src/providers/OrganisationProvider.tsx +23 -14
- package/src/providers/services/EventServiceProvider.tsx +1 -24
- package/src/providers/services/UnifiedAuthProvider.tsx +5 -48
- package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +3 -0
- package/src/rbac/README.md +20 -20
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +7 -457
- package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +33 -7
- package/src/rbac/adapters.tsx +7 -295
- package/src/rbac/api.test.ts +44 -56
- package/src/rbac/api.ts +10 -17
- package/src/rbac/cache-invalidation.ts +0 -1
- package/src/rbac/compliance/index.ts +10 -0
- package/src/rbac/compliance/pattern-detector.ts +553 -0
- package/src/rbac/compliance/runtime-compliance.ts +22 -0
- package/src/rbac/components/AccessDenied.tsx +150 -0
- package/src/rbac/components/NavigationGuard.tsx +12 -20
- package/src/rbac/components/PagePermissionGuard.tsx +4 -24
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +21 -8
- package/src/rbac/components/index.ts +3 -41
- package/src/rbac/eslint-rules.js +1 -1
- package/src/rbac/hooks/index.ts +0 -3
- package/src/rbac/hooks/permissions/index.ts +0 -3
- package/src/rbac/hooks/permissions/useAccessLevel.ts +4 -8
- package/src/rbac/hooks/usePermissions.ts +0 -3
- package/src/rbac/hooks/useRBAC.test.ts +21 -3
- package/src/rbac/hooks/useRBAC.ts +4 -3
- package/src/rbac/hooks/useResolvedScope.test.ts +57 -47
- package/src/rbac/hooks/useResolvedScope.ts +58 -140
- package/src/rbac/hooks/useResourcePermissions.test.ts +241 -60
- package/src/rbac/hooks/useResourcePermissions.ts +182 -63
- package/src/rbac/hooks/useRoleManagement.test.ts +65 -22
- package/src/rbac/hooks/useRoleManagement.ts +147 -19
- package/src/rbac/hooks/useSecureSupabase.ts +4 -8
- package/src/rbac/index.ts +7 -9
- package/src/rbac/permissions.ts +17 -17
- package/src/rbac/utils/contextValidator.ts +45 -7
- package/src/services/AuthService.ts +132 -23
- package/src/services/EventService.ts +4 -97
- package/src/services/InactivityService.ts +155 -58
- package/src/services/OrganisationService.ts +7 -44
- package/src/services/__tests__/OrganisationService.test.ts +26 -8
- package/src/services/base/BaseService.ts +0 -3
- package/src/styles/core.css +4 -0
- package/src/types/database.generated.ts +4733 -3809
- package/src/utils/__tests__/organisationContext.unit.test.ts +9 -10
- package/src/utils/context/organisationContext.test.ts +13 -28
- package/src/utils/context/organisationContext.ts +21 -52
- package/src/utils/dynamic/dynamicUtils.ts +1 -1
- package/src/utils/file-reference/index.ts +39 -15
- package/src/utils/formatting/formatDateTime.test.ts +3 -2
- package/src/utils/formatting/formatTime.test.ts +3 -2
- package/src/utils/google-places/loadGoogleMapsScript.ts +29 -4
- package/src/utils/index.ts +4 -1
- package/src/utils/persistence/__tests__/keyDerivation.test.ts +135 -0
- package/src/utils/persistence/__tests__/sensitiveFieldDetection.test.ts +123 -0
- package/src/utils/persistence/keyDerivation.ts +304 -0
- package/src/utils/persistence/sensitiveFieldDetection.ts +212 -0
- package/src/utils/security/secureStorage.ts +5 -5
- package/src/utils/storage/helpers.ts +3 -3
- package/src/utils/supabase/createBaseClient.ts +147 -0
- package/src/utils/timezone/timezone.test.ts +1 -2
- package/src/utils/timezone/timezone.ts +1 -1
- package/src/utils/validation/csrf.ts +4 -4
- package/cursor-rules/CHANGELOG.md +0 -119
- package/cursor-rules/README.md +0 -192
- package/dist/DataTable-E7YQZD7D.js +0 -175
- package/dist/DataTable-E7YQZD7D.js.map +0 -1
- package/dist/UnifiedAuthProvider-QPXO24B4.js +0 -18
- package/dist/UnifiedAuthProvider-QPXO24B4.js.map +0 -1
- package/dist/api-6LVZTHDS.js +0 -52
- package/dist/api-6LVZTHDS.js.map +0 -1
- package/dist/audit-V53FV5AG.js +0 -17
- package/dist/audit-V53FV5AG.js.map +0 -1
- package/dist/chunk-36LVWXB2.js +0 -227
- package/dist/chunk-36LVWXB2.js.map +0 -1
- package/dist/chunk-3LPHPB62.js.map +0 -1
- package/dist/chunk-5DRSZLL2.js.map +0 -1
- package/dist/chunk-5EC5MEWX.js.map +0 -1
- package/dist/chunk-63FOKYGO.js.map +0 -1
- package/dist/chunk-6SOIHG6Z.js.map +0 -1
- package/dist/chunk-7JPAB3T5.js.map +0 -1
- package/dist/chunk-ATKZM7RX.js +0 -2053
- package/dist/chunk-ATKZM7RX.js.map +0 -1
- package/dist/chunk-AVMLPIM7.js.map +0 -1
- package/dist/chunk-DGUM43GV.js.map +0 -1
- package/dist/chunk-E66EQZE6.js.map +0 -1
- package/dist/chunk-FFQEQTNW.js.map +0 -1
- package/dist/chunk-FMUCXFII.js.map +0 -1
- package/dist/chunk-G37KK66H.js.map +0 -1
- package/dist/chunk-I6DAQMWX.js.map +0 -1
- package/dist/chunk-J36DSWQK.js.map +0 -1
- package/dist/chunk-KQCRWDSA.js +0 -1
- package/dist/chunk-KQCRWDSA.js.map +0 -1
- package/dist/chunk-L4OXEN46.js.map +0 -1
- package/dist/chunk-LMC26NLJ.js +0 -84
- package/dist/chunk-LMC26NLJ.js.map +0 -1
- package/dist/chunk-M43Y4SSO.js.map +0 -1
- package/dist/chunk-M7MPQISP.js.map +0 -1
- package/dist/chunk-NN6WWZ5U.js.map +0 -1
- package/dist/chunk-OEWDTMG7.js.map +0 -1
- package/dist/chunk-PWLANIRT.js.map +0 -1
- package/dist/chunk-QXHPKYJV.js.map +0 -1
- package/dist/chunk-VBXEHIUJ.js.map +0 -1
- package/dist/chunk-YKRAFF5K.js.map +0 -1
- package/dist/chunk-ZSAAAMVR.js.map +0 -1
- package/dist/components.js.map +0 -1
- package/dist/contextValidator-OOPCLPZW.js +0 -9
- package/dist/contextValidator-OOPCLPZW.js.map +0 -1
- package/dist/eslint-rules/pace-core-compliance.cjs +0 -510
- package/dist/hooks.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers.js.map +0 -1
- package/dist/rbac/eslint-rules.js.map +0 -1
- package/dist/rbac/index.js.map +0 -1
- package/dist/styles/index.js.map +0 -1
- package/dist/theming/runtime.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils.js.map +0 -1
- package/docs/standards/01-architecture-standard.md +0 -44
- package/docs/standards/02-api-and-rpc-standard.md +0 -39
- package/docs/standards/03-component-standard.md +0 -32
- package/docs/standards/05-security-standard.md +0 -44
- package/docs/standards/06-testing-and-docs-standard.md +0 -29
- package/docs/standards/pace-core-compliance.md +0 -432
- package/scripts/audit/core/checks/accessibility.cjs +0 -197
- package/scripts/audit/core/checks/api-usage.cjs +0 -191
- package/scripts/audit/core/checks/bundle.cjs +0 -142
- package/scripts/audit/core/checks/compliance.cjs +0 -2706
- package/scripts/audit/core/checks/config.cjs +0 -54
- package/scripts/audit/core/checks/coverage.cjs +0 -84
- package/scripts/audit/core/checks/dependencies.cjs +0 -994
- package/scripts/audit/core/checks/documentation.cjs +0 -268
- package/scripts/audit/core/checks/environment.cjs +0 -116
- package/scripts/audit/core/checks/error-handling.cjs +0 -340
- package/scripts/audit/core/checks/forms.cjs +0 -172
- package/scripts/audit/core/checks/heuristics.cjs +0 -68
- package/scripts/audit/core/checks/hooks.cjs +0 -334
- package/scripts/audit/core/checks/imports.cjs +0 -244
- package/scripts/audit/core/checks/performance.cjs +0 -325
- package/scripts/audit/core/checks/routes.cjs +0 -117
- package/scripts/audit/core/checks/state.cjs +0 -130
- package/scripts/audit/core/checks/structure.cjs +0 -65
- package/scripts/audit/core/checks/style.cjs +0 -584
- package/scripts/audit/core/checks/testing.cjs +0 -122
- package/scripts/audit/core/checks/typescript.cjs +0 -61
- package/scripts/audit/core/scanner.cjs +0 -199
- package/scripts/audit/core/utils.cjs +0 -137
- package/scripts/audit/reporters/console.cjs +0 -151
- package/scripts/audit/reporters/json.cjs +0 -54
- package/scripts/audit/reporters/markdown.cjs +0 -124
- package/scripts/audit-consuming-app.cjs +0 -86
- package/src/eslint-rules/pace-core-compliance.cjs +0 -510
- package/src/eslint-rules/pace-core-compliance.js +0 -638
- package/src/rbac/components/EnhancedNavigationMenu.test.tsx +0 -555
- package/src/rbac/components/EnhancedNavigationMenu.tsx +0 -293
- package/src/rbac/components/NavigationProvider.test.tsx +0 -481
- package/src/rbac/components/NavigationProvider.tsx +0 -345
- package/src/rbac/components/PagePermissionProvider.test.tsx +0 -476
- package/src/rbac/components/PagePermissionProvider.tsx +0 -279
- package/src/rbac/components/PermissionEnforcer.tsx +0 -312
- package/src/rbac/components/RoleBasedRouter.tsx +0 -440
- package/src/rbac/components/SecureDataProvider.test.tsx +0 -543
- package/src/rbac/components/SecureDataProvider.tsx +0 -339
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +0 -620
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +0 -726
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +0 -661
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +0 -881
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +0 -783
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +0 -645
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +0 -659
- package/src/rbac/hooks/permissions/useCachedPermissions.ts +0 -79
- package/src/rbac/hooks/permissions/useHasAllPermissions.ts +0 -90
- package/src/rbac/hooks/permissions/useHasAnyPermission.ts +0 -90
|
@@ -71,13 +71,15 @@ import { Settings } from 'lucide-react'; // for icon example
|
|
|
71
71
|
|
|
72
72
|
### Accessibility
|
|
73
73
|
|
|
74
|
-
- **Keyboard Navigation**: Fully keyboard accessible.
|
|
74
|
+
- **Keyboard Navigation**: Fully keyboard accessible via native HTML `<button>` element behavior. The `Enter` and `Space` keys automatically trigger button activation without requiring custom keyboard handlers. This is standard browser behavior for native button elements.
|
|
75
75
|
- **ARIA Attributes**: Supports all standard ARIA attributes via `React.ButtonHTMLAttributes`.
|
|
76
76
|
- **Disabled State**: When disabled, button is not focusable and has `aria-disabled="true"`.
|
|
77
77
|
- **Icon Buttons**: Always provide `aria-label` for icon-only buttons for screen readers.
|
|
78
78
|
- **Focus Management**: Visible focus indicators via `focus-visible` styles.
|
|
79
79
|
- **Screen Readers**: Button text is automatically announced. Use descriptive labels.
|
|
80
80
|
|
|
81
|
+
**Note**: The Button component renders a native HTML `<button>` element, which provides built-in keyboard accessibility. No additional keyboard event handlers are required - the browser handles `Enter` and `Space` key activation automatically.
|
|
82
|
+
|
|
81
83
|
### Edge Cases
|
|
82
84
|
|
|
83
85
|
- **asChild Prop**: When using `asChild`, the button renders as the child element (e.g., `<Link>`). The `type` attribute is not applied in this case.
|
|
@@ -276,28 +276,53 @@ const { data: roleId } = await supabase.rpc('rbac_role_grant', { ... });
|
|
|
276
276
|
|
|
277
277
|
### Legacy Event RPCs
|
|
278
278
|
|
|
279
|
-
**Status**:
|
|
279
|
+
**Status**: Removed
|
|
280
280
|
**Since**: v0.5.x
|
|
281
|
-
**
|
|
281
|
+
**Removed**: v0.6.x
|
|
282
282
|
|
|
283
|
-
**
|
|
284
|
-
- `get_pace_user_events` → Use `data_user_events_get`
|
|
283
|
+
**Removed Functions**:
|
|
284
|
+
- `get_pace_user_events` → Use `data_user_events_get` or `useEvents()` hook
|
|
285
|
+
- `get_public_event_by_code` → Use direct table queries or `usePublicEvent()` hook
|
|
286
|
+
- `get_public_event_logo` → Use direct table queries or `usePublicEventLogo()` hook
|
|
285
287
|
|
|
286
288
|
**Migration**:
|
|
287
289
|
```typescript
|
|
288
|
-
// Old
|
|
290
|
+
// Old - get_pace_user_events
|
|
289
291
|
const { data } = await supabase.rpc('get_pace_user_events', {
|
|
290
292
|
user_uuid: userId,
|
|
291
293
|
app_name: appName,
|
|
292
294
|
p_organisation_id: orgId
|
|
293
295
|
});
|
|
294
296
|
|
|
295
|
-
// New
|
|
297
|
+
// New - Modern RPC
|
|
296
298
|
const { data, error } = await supabase.rpc('data_user_events_get', {
|
|
297
299
|
p_user_id: userId,
|
|
298
300
|
p_app_id: appId, // Use app ID instead of app name
|
|
299
301
|
p_organisation_id: orgId
|
|
300
302
|
});
|
|
303
|
+
|
|
304
|
+
// Better - Use pace-core hook
|
|
305
|
+
import { useEvents } from '@jmruthers/pace-core';
|
|
306
|
+
const { events } = useEvents();
|
|
307
|
+
|
|
308
|
+
// Old - get_public_event_by_code
|
|
309
|
+
const { data } = await supabase.rpc('get_public_event_by_code', {
|
|
310
|
+
event_code_param: eventCode
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
// New - Direct table query (pace-core handles this internally)
|
|
314
|
+
import { usePublicEvent } from '@jmruthers/pace-core';
|
|
315
|
+
const { event, isLoading, error } = usePublicEvent(eventCode);
|
|
316
|
+
|
|
317
|
+
// Old - get_public_event_logo
|
|
318
|
+
const { data } = await supabase.rpc('get_public_event_logo', {
|
|
319
|
+
event_id_param: eventId,
|
|
320
|
+
organisation_id_param: organisationId
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
// New - Direct table query (pace-core handles this internally)
|
|
324
|
+
import { usePublicEventLogo } from '@jmruthers/pace-core';
|
|
325
|
+
const { logoUrl, loading, error } = usePublicEventLogo(eventId, eventName, organisationId);
|
|
301
326
|
```
|
|
302
327
|
|
|
303
328
|
### Legacy Data Access RPCs
|
|
@@ -162,12 +162,87 @@ Documented in [RBAC API Reference](../rbac/api-reference.md):
|
|
|
162
162
|
|
|
163
163
|
### Event System
|
|
164
164
|
|
|
165
|
-
- `data_user_events_get` - Get events accessible to a user
|
|
166
|
-
- `get_public_event_by_code` - Get public event by code (public access, exception to naming pattern)
|
|
165
|
+
- `data_user_events_get` - Get events accessible to a user
|
|
167
166
|
- `data_event_list` - List events (if implemented)
|
|
168
167
|
- `app_event_create` - Create an event (if implemented)
|
|
169
168
|
|
|
170
|
-
**Note**:
|
|
169
|
+
**Note**: For public event access, use `usePublicEvent()` hook from pace-core, which handles direct table queries internally.
|
|
170
|
+
|
|
171
|
+
## Removed Legacy RPC Functions
|
|
172
|
+
|
|
173
|
+
The following RPC functions have been **removed** in v0.6.x. All consuming apps have been migrated to modern alternatives.
|
|
174
|
+
|
|
175
|
+
### Removed Functions (v0.6.x)
|
|
176
|
+
|
|
177
|
+
#### `get_pace_user_events` → `data_user_events_get` or `useEvents()` hook
|
|
178
|
+
|
|
179
|
+
**Status**: Removed in v0.6.x
|
|
180
|
+
**Replacement**: Use `data_user_events_get` RPC or `useEvents()` hook from pace-core
|
|
181
|
+
|
|
182
|
+
#### `get_public_event_by_code` → Direct table queries or `usePublicEvent()` hook
|
|
183
|
+
|
|
184
|
+
**Status**: Removed in v0.6.x
|
|
185
|
+
**Replacement**: Use `usePublicEvent()` hook from pace-core (handles direct table queries internally)
|
|
186
|
+
|
|
187
|
+
#### `get_public_event_logo` → Direct table queries or `usePublicEventLogo()` hook
|
|
188
|
+
|
|
189
|
+
**Status**: Removed in v0.6.x
|
|
190
|
+
**Replacement**: Use `usePublicEventLogo()` hook from pace-core (handles direct table queries internally)
|
|
191
|
+
|
|
192
|
+
#### `get_organisation_members` → Direct table queries or `data_user_organisation_roles_get`
|
|
193
|
+
|
|
194
|
+
**Status**: Removed in v0.6.x
|
|
195
|
+
**Replacement**: Query `rbac_organisation_roles` table directly or use `data_user_organisation_roles_get` RPC
|
|
196
|
+
|
|
197
|
+
#### `set_organisation_context` → No longer needed
|
|
198
|
+
|
|
199
|
+
**Status**: Removed in v0.6.x
|
|
200
|
+
**Replacement**: Organisation context is now handled automatically via secure Supabase client headers (`useSecureSupabase()` hook)
|
|
201
|
+
|
|
202
|
+
#### `get_organisation_context` → No longer used
|
|
203
|
+
|
|
204
|
+
**Status**: Removed in v0.6.x
|
|
205
|
+
**Replacement**: Not needed - context is handled via secure client
|
|
206
|
+
|
|
207
|
+
#### `get_page_scope_type` → Direct table queries
|
|
208
|
+
|
|
209
|
+
**Status**: Removed in v0.6.x
|
|
210
|
+
**Replacement**: Query `rbac_app_pages.scope_type` directly
|
|
211
|
+
|
|
212
|
+
**Migration Guide**: See [Deprecated Functions Documentation](./deprecated.md#legacy-event-rpcs) for detailed migration paths.
|
|
213
|
+
|
|
214
|
+
### Internal Infrastructure Functions (pace-core Only)
|
|
215
|
+
|
|
216
|
+
These functions are used internally by pace-core and should **NOT** be called directly by consuming apps:
|
|
217
|
+
**Modern Alternative**: Use `usePublicEvent` hook from pace-core
|
|
218
|
+
|
|
219
|
+
**Action Required**: If calling directly, migrate to `usePublicEvent` hook. If using pace-core hooks, no action needed.
|
|
220
|
+
|
|
221
|
+
#### `get_public_event_logo`
|
|
222
|
+
|
|
223
|
+
**Status**: Legacy (exception to naming standard)
|
|
224
|
+
**Usage**: Public pages only (no authentication required)
|
|
225
|
+
**Modern Alternative**: Use `usePublicEventLogo` hook from pace-core
|
|
226
|
+
|
|
227
|
+
**Action Required**: If calling directly, migrate to `usePublicEventLogo` hook. If using pace-core hooks, no action needed.
|
|
228
|
+
|
|
229
|
+
### Internal Infrastructure Functions (pace-core Only)
|
|
230
|
+
|
|
231
|
+
**Removed Functions** (v0.6.x):
|
|
232
|
+
- ~~`set_organisation_context`~~ - **REMOVED** - Organisation context now handled via secure client headers
|
|
233
|
+
- ~~`get_organisation_context`~~ - **REMOVED** - No longer needed
|
|
234
|
+
- ~~`get_page_scope_type`~~ - **REMOVED** - Replaced with direct table queries
|
|
235
|
+
|
|
236
|
+
**Active Functions** (pace-core internal, do not call directly):
|
|
237
|
+
- `grant_event_app_role` - Used by `useRoleManagement` hook (use hook instead)
|
|
238
|
+
|
|
239
|
+
**Note**: The removed functions have been replaced with direct table queries or are no longer needed. Organisation context is automatically handled by the secure Supabase client from `useSecureSupabase()` hook.
|
|
240
|
+
|
|
241
|
+
### Migration Resources
|
|
242
|
+
|
|
243
|
+
- **Legacy RPC Audit Prompt**: `packages/core/audit/legacy-rpc-audit-prompt.md` - Run this in your consuming app to identify usage
|
|
244
|
+
- **Deprecated Functions Guide**: [Deprecated Functions Documentation](./deprecated.md) - Detailed migration guides
|
|
245
|
+
- **Migration Examples**: See migration guides in `packages/core/docs/migration/`
|
|
171
246
|
|
|
172
247
|
## Application-Specific RPCs
|
|
173
248
|
|
|
@@ -140,9 +140,12 @@ function AccessibleDataTable() {
|
|
|
140
140
|
### Button Component
|
|
141
141
|
|
|
142
142
|
**Built-in accessibility**:
|
|
143
|
-
- ✅ Keyboard focusable
|
|
144
|
-
- ✅
|
|
145
|
-
- ✅
|
|
143
|
+
- ✅ Keyboard focusable via native HTML `<button>` element
|
|
144
|
+
- ✅ Native keyboard support: `Enter` and `Space` keys automatically activate buttons (standard browser behavior)
|
|
145
|
+
- ✅ Proper focus indicators via `focus-visible` styles
|
|
146
|
+
- ✅ ARIA attributes support via `React.ButtonHTMLAttributes`
|
|
147
|
+
|
|
148
|
+
**Keyboard Navigation**: The Button component uses native HTML `<button>` elements, which provide automatic keyboard accessibility. When a button is focused, pressing `Enter` or `Space` will trigger the button's `onClick` handler without requiring any custom keyboard event handlers. This is standard browser behavior and works out of the box.
|
|
146
149
|
|
|
147
150
|
**Example**:
|
|
148
151
|
```tsx
|
|
@@ -128,25 +128,6 @@ Content with examples and guidelines.
|
|
|
128
128
|
|
|
129
129
|
## Running Audits
|
|
130
130
|
|
|
131
|
-
### Comprehensive Audit
|
|
132
|
-
|
|
133
|
-
Run the comprehensive audit tool to check compliance:
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
node node_modules/@jmruthers/pace-core/scripts/audit-consuming-app.cjs
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
Or add to your `package.json`:
|
|
140
|
-
|
|
141
|
-
```json
|
|
142
|
-
{
|
|
143
|
-
"scripts": {
|
|
144
|
-
"audit:pace-core": "node node_modules/@jmruthers/pace-core/scripts/audit-consuming-app.cjs"
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
This generates a timestamped markdown report in `audit/` directory.
|
|
150
131
|
|
|
151
132
|
### Compliance Check
|
|
152
133
|
|
|
@@ -237,10 +218,9 @@ Each app maintains its own `.cursor/rules/` directory.
|
|
|
237
218
|
- Explicitly reference rules when needed: "Follow rules 00-04"
|
|
238
219
|
|
|
239
220
|
3. **Before Committing:**
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
Review the generated report in `audit/` directory
|
|
221
|
+
- Run linting and type checks
|
|
222
|
+
- Run tests
|
|
223
|
+
- Review code changes
|
|
244
224
|
|
|
245
225
|
4. **After pace-core Updates:**
|
|
246
226
|
```bash
|