@jmruthers/pace-core 0.5.189 → 0.5.190
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/core-usage-manifest.json +0 -4
- package/dist/{AuthService-B-cd2MA4.d.ts → AuthService-CbP_utw2.d.ts} +7 -3
- package/dist/{DataTable-GUFUNZ3N.js → DataTable-ON3IXISJ.js} +8 -8
- package/dist/{PublicPageProvider-B8HaLe69.d.ts → PublicPageProvider-C4uxosp6.d.ts} +83 -24
- package/dist/{UnifiedAuthProvider-BG0AL5eE.d.ts → UnifiedAuthProvider-BYA9qB-o.d.ts} +4 -3
- package/dist/{UnifiedAuthProvider-643PUAIM.js → UnifiedAuthProvider-X5NXANVI.js} +4 -2
- package/dist/{api-YP7XD5L6.js → api-I6UCQ5S6.js} +4 -2
- package/dist/{chunk-DDM4CCYT.js → chunk-4QYC5L4K.js} +60 -35
- package/dist/chunk-4QYC5L4K.js.map +1 -0
- package/dist/{chunk-IM4QE42D.js → chunk-73HSNNOQ.js} +141 -326
- package/dist/chunk-73HSNNOQ.js.map +1 -0
- package/dist/{chunk-YHCN776L.js → chunk-DZWK57KZ.js} +2 -75
- package/dist/chunk-DZWK57KZ.js.map +1 -0
- package/dist/{chunk-3GOZZZYH.js → chunk-HQVPB5MZ.js} +238 -301
- package/dist/chunk-HQVPB5MZ.js.map +1 -0
- package/dist/{chunk-THRPYOFK.js → chunk-HW3OVDUF.js} +5 -5
- package/dist/chunk-HW3OVDUF.js.map +1 -0
- package/dist/{chunk-F2IMUDXZ.js → chunk-I7PSE6JW.js} +75 -2
- package/dist/chunk-I7PSE6JW.js.map +1 -0
- package/dist/{chunk-VGZZXKBR.js → chunk-J2XXC7R5.js} +280 -52
- package/dist/chunk-J2XXC7R5.js.map +1 -0
- package/dist/{chunk-UCQSRW7Z.js → chunk-NIU6J6OX.js} +425 -378
- package/dist/chunk-NIU6J6OX.js.map +1 -0
- package/dist/{chunk-HESYZWZW.js → chunk-QWWZ5CAQ.js} +2 -2
- package/dist/{chunk-HEHYGYOX.js → chunk-RUYZKXOD.js} +401 -46
- package/dist/chunk-RUYZKXOD.js.map +1 -0
- package/dist/{chunk-2UUZZJFT.js → chunk-SDMHPX3X.js} +176 -160
- package/dist/{chunk-2UUZZJFT.js.map → chunk-SDMHPX3X.js.map} +1 -1
- package/dist/{chunk-MX64ZF6I.js → chunk-STYK4OH2.js} +11 -11
- package/dist/chunk-STYK4OH2.js.map +1 -0
- package/dist/{chunk-YGPFYGA6.js → chunk-VVBAW5A5.js} +822 -498
- package/dist/chunk-VVBAW5A5.js.map +1 -0
- package/dist/chunk-Y4BUBBHD.js +614 -0
- package/dist/chunk-Y4BUBBHD.js.map +1 -0
- package/dist/{chunk-SAUPYVLF.js → chunk-ZSAAAMVR.js} +1 -1
- package/dist/chunk-ZSAAAMVR.js.map +1 -0
- package/dist/components.d.ts +3 -4
- package/dist/components.js +19 -19
- package/dist/components.js.map +1 -1
- package/dist/eslint-rules/pace-core-compliance.cjs +0 -2
- package/dist/{file-reference-D037xOFK.d.ts → file-reference-BavO2eQj.d.ts} +13 -10
- package/dist/hooks.d.ts +10 -5
- package/dist/hooks.js +14 -8
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +13 -11
- package/dist/index.js +79 -69
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +3 -3
- package/dist/providers.js +3 -1
- package/dist/rbac/index.d.ts +76 -12
- package/dist/rbac/index.js +12 -9
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/{usePublicRouteParams-CTDELQ7H.d.ts → usePublicRouteParams-DxIDS4bC.d.ts} +16 -9
- package/dist/utils.js +16 -16
- package/docs/README.md +2 -2
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +2 -2
- package/docs/api/classes/Logger.md +1 -1
- package/docs/api/classes/MissingUserContextError.md +2 -2
- package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
- package/docs/api/classes/PermissionDeniedError.md +1 -1
- package/docs/api/classes/RBACAuditManager.md +1 -1
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +4 -4
- package/docs/api/classes/RBACError.md +1 -1
- package/docs/api/classes/RBACNotInitializedError.md +2 -2
- package/docs/api/classes/SecureSupabaseClient.md +21 -16
- package/docs/api/classes/StorageUtils.md +7 -4
- package/docs/api/enums/FileCategory.md +1 -1
- package/docs/api/enums/LogLevel.md +1 -1
- package/docs/api/enums/RBACErrorCode.md +1 -1
- package/docs/api/enums/RPCFunction.md +1 -1
- package/docs/api/interfaces/AddressFieldProps.md +1 -1
- package/docs/api/interfaces/AddressFieldRef.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/AutocompleteOptions.md +1 -1
- package/docs/api/interfaces/AvatarProps.md +1 -1
- package/docs/api/interfaces/BadgeProps.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +1 -1
- package/docs/api/interfaces/CalendarProps.md +20 -6
- package/docs/api/interfaces/CardProps.md +1 -1
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/ComplianceResult.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +9 -9
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +1 -1
- package/docs/api/interfaces/DataTableColumn.md +1 -1
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
- package/docs/api/interfaces/DatabaseComplianceResult.md +1 -1
- package/docs/api/interfaces/DatabaseIssue.md +1 -1
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/ExportColumn.md +1 -1
- package/docs/api/interfaces/ExportOptions.md +1 -1
- package/docs/api/interfaces/FileDisplayProps.md +62 -16
- package/docs/api/interfaces/FileMetadata.md +1 -1
- package/docs/api/interfaces/FileReference.md +2 -2
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +26 -12
- package/docs/api/interfaces/FileUploadProps.md +30 -19
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/FormFieldProps.md +1 -1
- package/docs/api/interfaces/FormProps.md +1 -1
- package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +1 -1
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoggerConfig.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +10 -10
- package/docs/api/interfaces/NavigationContextType.md +9 -9
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +1 -1
- package/docs/api/interfaces/NavigationMenuProps.md +1 -1
- package/docs/api/interfaces/NavigationProviderProps.md +7 -7
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +8 -8
- package/docs/api/interfaces/PagePermissionContextType.md +8 -8
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +7 -7
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/ParsedAddress.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProgressProps.md +3 -11
- package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
- package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
- package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
- package/docs/api/interfaces/QuickFix.md +1 -1
- package/docs/api/interfaces/RBACAccessValidateParams.md +1 -1
- package/docs/api/interfaces/RBACAccessValidateResult.md +1 -1
- package/docs/api/interfaces/RBACAuditLogParams.md +1 -1
- package/docs/api/interfaces/RBACAuditLogResult.md +1 -1
- package/docs/api/interfaces/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACContext.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +1 -1
- package/docs/api/interfaces/RBACPerformanceMetrics.md +1 -1
- package/docs/api/interfaces/RBACPermissionCheckParams.md +1 -1
- package/docs/api/interfaces/RBACPermissionCheckResult.md +1 -1
- package/docs/api/interfaces/RBACPermissionsGetParams.md +1 -1
- package/docs/api/interfaces/RBACPermissionsGetResult.md +1 -1
- package/docs/api/interfaces/RBACResult.md +1 -1
- package/docs/api/interfaces/RBACRoleGrantParams.md +1 -1
- package/docs/api/interfaces/RBACRoleGrantResult.md +1 -1
- package/docs/api/interfaces/RBACRoleRevokeParams.md +1 -1
- package/docs/api/interfaces/RBACRoleRevokeResult.md +1 -1
- package/docs/api/interfaces/RBACRoleValidateParams.md +1 -1
- package/docs/api/interfaces/RBACRoleValidateResult.md +1 -1
- package/docs/api/interfaces/RBACRolesListParams.md +1 -1
- package/docs/api/interfaces/RBACRolesListResult.md +1 -1
- package/docs/api/interfaces/RBACSessionTrackParams.md +1 -1
- package/docs/api/interfaces/RBACSessionTrackResult.md +1 -1
- package/docs/api/interfaces/ResourcePermissions.md +1 -1
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +8 -8
- package/docs/api/interfaces/RoleBasedRouterProps.md +10 -10
- package/docs/api/interfaces/RoleManagementResult.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +10 -10
- package/docs/api/interfaces/RouteConfig.md +10 -10
- package/docs/api/interfaces/RuntimeComplianceResult.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +9 -9
- package/docs/api/interfaces/SecureDataProviderProps.md +8 -8
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +1 -1
- package/docs/api/interfaces/SetupIssue.md +1 -1
- package/docs/api/interfaces/StorageConfig.md +4 -4
- package/docs/api/interfaces/StorageFileInfo.md +7 -7
- package/docs/api/interfaces/StorageFileMetadata.md +25 -14
- package/docs/api/interfaces/StorageListOptions.md +22 -9
- package/docs/api/interfaces/StorageListResult.md +4 -4
- package/docs/api/interfaces/StorageUploadOptions.md +21 -8
- package/docs/api/interfaces/StorageUploadResult.md +6 -6
- package/docs/api/interfaces/StorageUrlOptions.md +19 -6
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/TabsContentProps.md +1 -1
- package/docs/api/interfaces/TabsListProps.md +1 -1
- package/docs/api/interfaces/TabsProps.md +1 -1
- package/docs/api/interfaces/TabsTriggerProps.md +1 -1
- package/docs/api/interfaces/TextareaProps.md +1 -1
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +53 -53
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
- package/docs/api/interfaces/UseFormDialogOptions.md +1 -1
- package/docs/api/interfaces/UseFormDialogReturn.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeOptions.md +4 -4
- package/docs/api/interfaces/UseResolvedScopeReturn.md +4 -4
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +11 -11
- package/docs/api/interfaces/UserMenuProps.md +1 -1
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +151 -92
- package/docs/api-reference/components.md +15 -7
- package/docs/api-reference/providers.md +2 -2
- package/docs/api-reference/rpc-functions.md +1 -0
- package/docs/best-practices/README.md +1 -1
- package/docs/best-practices/deployment.md +8 -8
- package/docs/getting-started/examples/README.md +2 -2
- package/docs/getting-started/installation-guide.md +4 -4
- package/docs/getting-started/quick-start.md +3 -3
- package/docs/migration/MIGRATION_GUIDE.md +3 -3
- package/docs/rbac/compliance/compliance-guide.md +2 -2
- package/docs/rbac/event-based-apps.md +2 -2
- package/docs/rbac/getting-started.md +2 -2
- package/docs/rbac/quick-start.md +2 -2
- package/docs/security/README.md +4 -4
- package/docs/standards/07-rbac-and-rls-standard.md +430 -7
- package/docs/troubleshooting/README.md +2 -2
- package/docs/troubleshooting/migration.md +3 -3
- package/package.json +1 -3
- package/scripts/check-pace-core-compliance.cjs +1 -1
- package/scripts/check-pace-core-compliance.js +1 -1
- package/src/__tests__/fixtures/supabase.ts +301 -0
- package/src/__tests__/public-recipe-view.test.ts +9 -9
- package/src/__tests__/rls-policies.test.ts +197 -61
- package/src/components/AddressField/AddressField.test.tsx +42 -0
- package/src/components/AddressField/AddressField.tsx +71 -60
- package/src/components/AddressField/README.md +1 -0
- package/src/components/Alert/Alert.test.tsx +50 -10
- package/src/components/Alert/Alert.tsx +5 -3
- package/src/components/Avatar/Avatar.test.tsx +95 -43
- package/src/components/Avatar/Avatar.tsx +16 -16
- package/src/components/Button/Button.test.tsx +2 -1
- package/src/components/Button/Button.tsx +3 -3
- package/src/components/Calendar/Calendar.test.tsx +53 -37
- package/src/components/Calendar/Calendar.tsx +409 -82
- package/src/components/Card/Card.test.tsx +7 -4
- package/src/components/Card/Card.tsx +3 -6
- package/src/components/Checkbox/Checkbox.tsx +2 -2
- package/src/components/DataTable/components/ActionButtons.tsx +5 -5
- package/src/components/DataTable/components/BulkOperationsDropdown.tsx +2 -2
- package/src/components/DataTable/components/ColumnFilter.tsx +1 -1
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +3 -3
- package/src/components/DataTable/components/DataTableBody.tsx +12 -12
- package/src/components/DataTable/components/DataTableCore.tsx +3 -3
- package/src/components/DataTable/components/DataTableToolbar.tsx +5 -5
- package/src/components/DataTable/components/DraggableColumnHeader.tsx +3 -3
- package/src/components/DataTable/components/EditableRow.tsx +2 -2
- package/src/components/DataTable/components/EmptyState.tsx +3 -3
- package/src/components/DataTable/components/GroupHeader.tsx +2 -2
- package/src/components/DataTable/components/GroupingDropdown.tsx +1 -1
- package/src/components/DataTable/components/ImportModal.tsx +4 -4
- package/src/components/DataTable/components/LoadingState.tsx +1 -1
- package/src/components/DataTable/components/PaginationControls.tsx +11 -11
- package/src/components/DataTable/components/UnifiedTableBody.tsx +9 -9
- package/src/components/DataTable/components/ViewRowModal.tsx +2 -2
- package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +11 -37
- package/src/components/DataTable/components/__tests__/DataTableToolbar.test.tsx +157 -0
- package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +2 -1
- package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +128 -0
- package/src/components/DataTable/core/__tests__/ActionManager.test.ts +19 -0
- package/src/components/DataTable/core/__tests__/ColumnFactory.test.ts +51 -0
- package/src/components/DataTable/core/__tests__/ColumnManager.test.ts +84 -0
- package/src/components/DataTable/core/__tests__/DataManager.test.ts +14 -0
- package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +136 -0
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +16 -0
- package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +18 -0
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +28 -7
- package/src/components/DataTable/utils/__tests__/hierarchicalUtils.test.ts +30 -1
- package/src/components/DataTable/utils/hierarchicalUtils.ts +38 -10
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +8 -3
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +4 -4
- package/src/components/Dialog/Dialog.tsx +2 -2
- package/src/components/EventSelector/EventSelector.tsx +7 -7
- package/src/components/FileDisplay/FileDisplay.tsx +291 -179
- package/src/components/FileUpload/FileUpload.tsx +7 -4
- package/src/components/Header/Header.test.tsx +28 -0
- package/src/components/Header/Header.tsx +22 -9
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +2 -2
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +19 -14
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +5 -5
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +127 -1
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +8 -8
- package/src/components/PaceAppLayout/PaceAppLayout.integration.test.tsx +4 -0
- package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +3 -0
- package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +3 -0
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +16 -6
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +37 -3
- package/src/components/PaceAppLayout/test-setup.tsx +1 -0
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +66 -45
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +6 -4
- package/src/components/Progress/Progress.test.tsx +18 -19
- package/src/components/Progress/Progress.tsx +31 -32
- package/src/components/PublicLayout/PublicLayout.test.tsx +6 -6
- package/src/components/PublicLayout/PublicPageProvider.tsx +5 -3
- package/src/components/Select/Select.tsx +5 -5
- package/src/components/Switch/Switch.test.tsx +2 -1
- package/src/components/Switch/Switch.tsx +1 -1
- package/src/components/Toast/Toast.tsx +1 -1
- package/src/components/Tooltip/Tooltip.test.tsx +8 -2
- package/src/components/UserMenu/UserMenu.tsx +3 -3
- package/src/eslint-rules/pace-core-compliance.cjs +0 -2
- package/src/eslint-rules/pace-core-compliance.js +0 -2
- package/src/hooks/__tests__/hooks.integration.test.tsx +4 -1
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +76 -5
- package/src/hooks/__tests__/useDataTableState.test.ts +76 -0
- package/src/hooks/__tests__/useFileUrl.unit.test.ts +25 -69
- package/src/hooks/__tests__/useFileUrlCache.test.ts +129 -0
- package/src/hooks/__tests__/usePreventTabReload.test.ts +88 -0
- package/src/hooks/__tests__/{usePublicEvent.unit.test.ts → usePublicEvent.test.ts} +28 -1
- package/src/hooks/__tests__/useQueryCache.test.ts +144 -0
- package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +58 -16
- package/src/hooks/index.ts +1 -1
- package/src/hooks/public/usePublicEvent.ts +2 -2
- package/src/hooks/public/usePublicFileDisplay.ts +173 -87
- package/src/hooks/useAppConfig.ts +24 -5
- package/src/hooks/useFileDisplay.ts +297 -34
- package/src/hooks/useFileReference.ts +56 -11
- package/src/hooks/useFileUrl.ts +1 -1
- package/src/hooks/useInactivityTracker.ts +16 -7
- package/src/hooks/usePermissionCache.test.ts +85 -8
- package/src/hooks/useQueryCache.ts +21 -0
- package/src/hooks/useSecureDataAccess.test.ts +80 -35
- package/src/hooks/useSecureDataAccess.ts +80 -37
- package/src/providers/services/EventServiceProvider.tsx +37 -17
- package/src/providers/services/InactivityServiceProvider.tsx +4 -4
- package/src/providers/services/OrganisationServiceProvider.tsx +8 -1
- package/src/providers/services/UnifiedAuthProvider.tsx +115 -29
- package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +451 -0
- package/src/rbac/__tests__/engine.comprehensive.test.ts +12 -0
- package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +8 -0
- package/src/rbac/__tests__/rbac-engine-simplified.test.ts +4 -0
- package/src/rbac/api.ts +240 -36
- package/src/rbac/cache-invalidation.ts +21 -7
- package/src/rbac/compliance/quick-fix-suggestions.ts +1 -1
- package/src/rbac/components/NavigationGuard.tsx +23 -63
- package/src/rbac/components/NavigationProvider.test.tsx +52 -23
- package/src/rbac/components/NavigationProvider.tsx +13 -11
- package/src/rbac/components/PagePermissionGuard.tsx +77 -203
- package/src/rbac/components/PagePermissionProvider.tsx +13 -11
- package/src/rbac/components/PermissionEnforcer.tsx +24 -62
- package/src/rbac/components/RoleBasedRouter.tsx +14 -12
- package/src/rbac/components/SecureDataProvider.tsx +13 -11
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +104 -41
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +49 -12
- package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +22 -1
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +161 -82
- package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +22 -1
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +77 -30
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +39 -5
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +47 -4
- package/src/rbac/engine.ts +4 -2
- package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +144 -52
- package/src/rbac/hooks/index.ts +3 -0
- package/src/rbac/hooks/useCan.test.ts +101 -53
- package/src/rbac/hooks/usePermissions.ts +108 -41
- package/src/rbac/hooks/useRBAC.test.ts +11 -3
- package/src/rbac/hooks/useRBAC.ts +83 -40
- package/src/rbac/hooks/useResolvedScope.test.ts +189 -63
- package/src/rbac/hooks/useResolvedScope.ts +128 -70
- package/src/rbac/hooks/useSecureSupabase.ts +36 -19
- package/src/rbac/hooks/useSuperAdminBypass.ts +126 -0
- package/src/rbac/request-deduplication.ts +1 -1
- package/src/rbac/secureClient.ts +72 -12
- package/src/rbac/security.ts +29 -23
- package/src/rbac/types.ts +10 -0
- package/src/rbac/utils/__tests__/contextValidator.test.ts +150 -0
- package/src/rbac/utils/__tests__/deep-equal.test.ts +53 -0
- package/src/rbac/utils/__tests__/eventContext.test.ts +6 -1
- package/src/rbac/utils/contextValidator.ts +288 -0
- package/src/rbac/utils/eventContext.ts +48 -2
- package/src/services/EventService.ts +165 -21
- package/src/services/OrganisationService.ts +37 -2
- package/src/services/__tests__/EventService.test.ts +26 -21
- package/src/types/file-reference.ts +13 -10
- package/src/utils/app/appNameResolver.test.ts +346 -73
- package/src/utils/context/superAdminOverride.ts +58 -0
- package/src/utils/file-reference/index.ts +61 -33
- package/src/utils/google-places/googlePlacesUtils.test.ts +98 -0
- package/src/utils/google-places/loadGoogleMapsScript.test.ts +83 -0
- package/src/utils/storage/helpers.test.ts +1 -1
- package/src/utils/storage/helpers.ts +38 -19
- package/src/utils/storage/types.ts +15 -8
- package/src/utils/validation/__tests__/csrf.test.ts +105 -0
- package/src/utils/validation/__tests__/sqlInjectionProtection.test.ts +92 -0
- package/src/vite-env.d.ts +2 -2
- package/dist/chunk-3GOZZZYH.js.map +0 -1
- package/dist/chunk-DDM4CCYT.js.map +0 -1
- package/dist/chunk-E7UAOUMY.js +0 -75
- package/dist/chunk-E7UAOUMY.js.map +0 -1
- package/dist/chunk-F2IMUDXZ.js.map +0 -1
- package/dist/chunk-HEHYGYOX.js.map +0 -1
- package/dist/chunk-IM4QE42D.js.map +0 -1
- package/dist/chunk-MX64ZF6I.js.map +0 -1
- package/dist/chunk-SAUPYVLF.js.map +0 -1
- package/dist/chunk-THRPYOFK.js.map +0 -1
- package/dist/chunk-UCQSRW7Z.js.map +0 -1
- package/dist/chunk-VGZZXKBR.js.map +0 -1
- package/dist/chunk-YGPFYGA6.js.map +0 -1
- package/dist/chunk-YHCN776L.js.map +0 -1
- package/src/hooks/__tests__/usePermissionCache.simple.test.ts +0 -192
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +0 -741
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +0 -703
- package/src/rbac/hooks/useRBAC.simple.test.ts +0 -95
- package/src/rbac/utils/__tests__/eventContext.unit.test.ts +0 -428
- /package/dist/{DataTable-GUFUNZ3N.js.map → DataTable-ON3IXISJ.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-643PUAIM.js.map → UnifiedAuthProvider-X5NXANVI.js.map} +0 -0
- /package/dist/{api-YP7XD5L6.js.map → api-I6UCQ5S6.js.map} +0 -0
- /package/dist/{chunk-HESYZWZW.js.map → chunk-QWWZ5CAQ.js.map} +0 -0
|
@@ -889,12 +889,12 @@ import {
|
|
|
889
889
|
|
|
890
890
|
## Alert
|
|
891
891
|
|
|
892
|
-
A flexible and accessible alert component for displaying important messages.
|
|
892
|
+
A flexible and accessible alert component for displaying important messages. Uses semantic HTML (`<aside>`) for better accessibility and semantic meaning.
|
|
893
893
|
|
|
894
894
|
### Props
|
|
895
895
|
|
|
896
896
|
```typescript
|
|
897
|
-
interface AlertProps extends React.HTMLAttributes<
|
|
897
|
+
interface AlertProps extends React.HTMLAttributes<HTMLElement> {
|
|
898
898
|
variant?: 'default' | 'destructive' | 'inline';
|
|
899
899
|
className?: string;
|
|
900
900
|
}
|
|
@@ -903,7 +903,7 @@ interface AlertTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {
|
|
|
903
903
|
className?: string;
|
|
904
904
|
}
|
|
905
905
|
|
|
906
|
-
interface AlertDescriptionProps extends React.HTMLAttributes<
|
|
906
|
+
interface AlertDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {
|
|
907
907
|
className?: string;
|
|
908
908
|
}
|
|
909
909
|
```
|
|
@@ -913,7 +913,7 @@ interface AlertDescriptionProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
913
913
|
```tsx
|
|
914
914
|
import { Alert, AlertTitle, AlertDescription } from '@jmruthers/pace-core';
|
|
915
915
|
|
|
916
|
-
// Basic alert
|
|
916
|
+
// Basic alert (renders as <aside> element)
|
|
917
917
|
<Alert>
|
|
918
918
|
<AlertTitle>Success</AlertTitle>
|
|
919
919
|
<AlertDescription>Your changes have been saved.</AlertDescription>
|
|
@@ -934,9 +934,17 @@ import { Alert, AlertTitle, AlertDescription } from '@jmruthers/pace-core';
|
|
|
934
934
|
|
|
935
935
|
### Variants
|
|
936
936
|
|
|
937
|
-
- **default**: Standard alert with background and border
|
|
938
|
-
- **destructive**: Red alert for errors and warnings
|
|
939
|
-
- **inline**: Lightweight text formatting without background
|
|
937
|
+
- **default**: Standard alert with background and border (renders as `<aside>`)
|
|
938
|
+
- **destructive**: Red alert for errors and warnings (renders as `<aside>`)
|
|
939
|
+
- **inline**: Lightweight text formatting without background (renders as fragment)
|
|
940
|
+
|
|
941
|
+
### Semantic HTML
|
|
942
|
+
|
|
943
|
+
The Alert component uses semantic HTML for better accessibility:
|
|
944
|
+
- **Default and destructive variants**: Render as `<aside>` elements with `role="alert"`
|
|
945
|
+
- **Inline variant**: Renders as a React Fragment (no wrapper element)
|
|
946
|
+
- **AlertTitle**: Renders as `<h5>` (default/destructive) or `<strong>` (inline)
|
|
947
|
+
- **AlertDescription**: Renders as `<p>` (default/destructive) or `<span>` (inline)
|
|
940
948
|
|
|
941
949
|
## Card
|
|
942
950
|
|
|
@@ -91,8 +91,8 @@ The `UnifiedAuthProvider` includes built-in inactivity tracking that automatical
|
|
|
91
91
|
|
|
92
92
|
#### Features
|
|
93
93
|
|
|
94
|
-
- **Automatic logout** after
|
|
95
|
-
- **Warning modal** appears
|
|
94
|
+
- **Automatic logout** after configured period of inactivity (must be configured)
|
|
95
|
+
- **Warning modal** appears before logout (must be configured)
|
|
96
96
|
- **Cross-tab synchronization** - activity in any tab resets the timer
|
|
97
97
|
- **Persistence** - survives page reloads and browser restarts
|
|
98
98
|
- **Production-safe** - cannot be disabled in production builds
|
|
@@ -146,6 +146,7 @@ Documented in [RBAC API Reference](../rbac/api-reference.md):
|
|
|
146
146
|
**Data Access (RBAC-protected):**
|
|
147
147
|
- `data_user_organisations_get` - Get all organisations for a user
|
|
148
148
|
- `data_user_organisation_roles_get` - Get user roles in organisations
|
|
149
|
+
- `get_organisation_members` - (exception to naming standard) Returns distinct active organisation role assignments for dashboard statistics. Enforces `check_user_organisation_access` so only super admins or organisation members can call it.
|
|
149
150
|
- `data_user_events_get` - Get events accessible to a user
|
|
150
151
|
- `data_cake_meals_get` - Get cake meals for an event (application-specific, RBAC-protected)
|
|
151
152
|
|
|
@@ -242,7 +242,7 @@ For detailed testing guidelines, see [Testing Best Practices](./testing.md).
|
|
|
242
242
|
// ✅ Good - Environment validation
|
|
243
243
|
const config = {
|
|
244
244
|
supabaseUrl: process.env.VITE_SUPABASE_URL,
|
|
245
|
-
supabaseKey: process.env.
|
|
245
|
+
supabaseKey: process.env.VITE_SUPABASE_PUBLISHABLE_KEY,
|
|
246
246
|
appName: process.env.VITE_APP_NAME,
|
|
247
247
|
};
|
|
248
248
|
|
|
@@ -25,21 +25,21 @@ Deployment in `@jmruthers/pace-core` covers multiple environments:
|
|
|
25
25
|
// .env.local (development)
|
|
26
26
|
VITE_SUPABASE_URL=http://localhost:54321
|
|
27
27
|
// Accepts both legacy anon keys and modern publishable keys (sb_publishable_...)
|
|
28
|
-
|
|
28
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=your-local-publishable-key
|
|
29
29
|
VITE_APP_ENV=development
|
|
30
30
|
VITE_DEBUG=true
|
|
31
31
|
|
|
32
32
|
// .env.staging
|
|
33
33
|
VITE_SUPABASE_URL=https://your-project.supabase.co
|
|
34
34
|
// Accepts both legacy anon keys and modern publishable keys (sb_publishable_...)
|
|
35
|
-
|
|
35
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=your-staging-publishable-key
|
|
36
36
|
VITE_APP_ENV=staging
|
|
37
37
|
VITE_DEBUG=false
|
|
38
38
|
|
|
39
39
|
// .env.production
|
|
40
40
|
VITE_SUPABASE_URL=https://your-project.supabase.co
|
|
41
41
|
// Accepts both legacy anon keys and modern publishable keys (sb_publishable_...)
|
|
42
|
-
|
|
42
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=your-production-publishable-key
|
|
43
43
|
VITE_APP_ENV=production
|
|
44
44
|
VITE_DEBUG=false
|
|
45
45
|
```
|
|
@@ -274,7 +274,7 @@ jobs:
|
|
|
274
274
|
run: npm run build
|
|
275
275
|
env:
|
|
276
276
|
VITE_SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
|
|
277
|
-
|
|
277
|
+
VITE_SUPABASE_PUBLISHABLE_KEY: ${{ secrets.SUPABASE_PUBLISHABLE_KEY }}
|
|
278
278
|
VITE_APP_ENV: production
|
|
279
279
|
|
|
280
280
|
- name: Upload build artifacts
|
|
@@ -354,7 +354,7 @@ jobs:
|
|
|
354
354
|
run: npm run build:staging
|
|
355
355
|
env:
|
|
356
356
|
VITE_SUPABASE_URL: ${{ secrets.STAGING_SUPABASE_URL }}
|
|
357
|
-
|
|
357
|
+
VITE_SUPABASE_PUBLISHABLE_KEY: ${{ secrets.STAGING_SUPABASE_PUBLISHABLE_KEY }}
|
|
358
358
|
VITE_APP_ENV: staging
|
|
359
359
|
|
|
360
360
|
- name: Deploy to Vercel (Staging)
|
|
@@ -441,7 +441,7 @@ jobs:
|
|
|
441
441
|
],
|
|
442
442
|
"env": {
|
|
443
443
|
"VITE_SUPABASE_URL": "@supabase-url",
|
|
444
|
-
"
|
|
444
|
+
"VITE_SUPABASE_PUBLISHABLE_KEY": "@supabase-publishable-key"
|
|
445
445
|
}
|
|
446
446
|
}
|
|
447
447
|
```
|
|
@@ -566,13 +566,13 @@ export const securityHeaders = {
|
|
|
566
566
|
```bash
|
|
567
567
|
# .env.example (template for required variables)
|
|
568
568
|
VITE_SUPABASE_URL=
|
|
569
|
-
|
|
569
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=
|
|
570
570
|
VITE_APP_ENV=development
|
|
571
571
|
VITE_DEBUG=false
|
|
572
572
|
|
|
573
573
|
# .env.production (actual production values - never commit)
|
|
574
574
|
VITE_SUPABASE_URL=https://your-project.supabase.co
|
|
575
|
-
|
|
575
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=your-production-publishable-key
|
|
576
576
|
VITE_APP_ENV=production
|
|
577
577
|
VITE_DEBUG=false
|
|
578
578
|
```
|
|
@@ -53,7 +53,7 @@ npm install @supabase/supabase-js react-router-dom
|
|
|
53
53
|
Create `.env.local`:
|
|
54
54
|
```env
|
|
55
55
|
VITE_SUPABASE_URL=your_supabase_url
|
|
56
|
-
|
|
56
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=your_supabase_publishable_key
|
|
57
57
|
VITE_APP_NAME=Basic Auth App
|
|
58
58
|
```
|
|
59
59
|
|
|
@@ -103,7 +103,7 @@ src/
|
|
|
103
103
|
import { createClient } from '@supabase/supabase-js';
|
|
104
104
|
|
|
105
105
|
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL;
|
|
106
|
-
const supabaseKey = import.meta.env.
|
|
106
|
+
const supabaseKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY;
|
|
107
107
|
|
|
108
108
|
export const supabase = createClient(supabaseUrl, supabaseKey);
|
|
109
109
|
```
|
|
@@ -17,7 +17,7 @@ reviewedBy: documentation-standards-audit
|
|
|
17
17
|
npm install @jmruthers/pace-core
|
|
18
18
|
|
|
19
19
|
# 2. Install peer dependencies
|
|
20
|
-
npm install react react-dom @tanstack/react-table @radix-ui/react-avatar @radix-ui/react-checkbox @radix-ui/react-dialog @radix-ui/react-label @radix-ui/react-
|
|
20
|
+
npm install react react-dom @tanstack/react-table @radix-ui/react-avatar @radix-ui/react-checkbox @radix-ui/react-dialog @radix-ui/react-label @radix-ui/react-slot @radix-ui/react-switch @radix-ui/react-tabs @radix-ui/react-toast @radix-ui/react-tooltip lucide-react react-day-picker react-hook-form react-router-dom clsx tailwind-merge zod
|
|
21
21
|
|
|
22
22
|
# 3. Install Tailwind v4
|
|
23
23
|
npm install -D @tailwindcss/vite tailwindcss@^4.0.0
|
|
@@ -36,7 +36,7 @@ npm install @jmruthers/pace-core
|
|
|
36
36
|
|
|
37
37
|
**Required Peer Dependencies:**
|
|
38
38
|
```bash
|
|
39
|
-
npm install react react-dom @tanstack/react-table @radix-ui/react-avatar @radix-ui/react-checkbox @radix-ui/react-dialog @radix-ui/react-label @radix-ui/react-
|
|
39
|
+
npm install react react-dom @tanstack/react-table @radix-ui/react-avatar @radix-ui/react-checkbox @radix-ui/react-dialog @radix-ui/react-label @radix-ui/react-slot @radix-ui/react-switch @radix-ui/react-tabs @radix-ui/react-toast @radix-ui/react-tooltip lucide-react react-day-picker react-hook-form react-router-dom clsx tailwind-merge zod
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
**Note**: `@supabase/supabase-js` and `@tanstack/react-query` are included as dependencies and do not need to be installed separately.
|
|
@@ -291,7 +291,7 @@ Create `src/lib/supabase.ts`:
|
|
|
291
291
|
import { createClient } from '@supabase/supabase-js'
|
|
292
292
|
|
|
293
293
|
const supabaseUrl = process.env.VITE_SUPABASE_URL!
|
|
294
|
-
const
|
|
294
|
+
const supabasePublishableKey = process.env.VITE_SUPABASE_PUBLISHABLE_KEY!
|
|
295
295
|
|
|
296
296
|
export const supabase = createClient(supabaseUrl, supabaseAnonKey)
|
|
297
297
|
```
|
|
@@ -301,7 +301,7 @@ Set environment variables in `.env.local`:
|
|
|
301
301
|
```bash
|
|
302
302
|
VITE_SUPABASE_URL=https://your-project.supabase.co
|
|
303
303
|
# Accepts both legacy anon keys and modern publishable keys (sb_publishable_...)
|
|
304
|
-
|
|
304
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=your-publishable-key-here
|
|
305
305
|
```
|
|
306
306
|
|
|
307
307
|
Wrap your app with providers in the correct nesting order:
|
|
@@ -35,7 +35,7 @@ npm install @jmruthers/pace-core \
|
|
|
35
35
|
@supabase/supabase-js \
|
|
36
36
|
@tanstack/react-query @tanstack/react-table \
|
|
37
37
|
@radix-ui/react-avatar @radix-ui/react-checkbox @radix-ui/react-dialog \
|
|
38
|
-
@radix-ui/react-label @radix-ui/react-
|
|
38
|
+
@radix-ui/react-label @radix-ui/react-slot \
|
|
39
39
|
@radix-ui/react-switch @radix-ui/react-tabs @radix-ui/react-toast @radix-ui/react-tooltip \
|
|
40
40
|
clsx lucide-react react-day-picker react-hook-form react-router-dom tailwind-merge zod
|
|
41
41
|
|
|
@@ -104,7 +104,7 @@ Create `.env.local`:
|
|
|
104
104
|
|
|
105
105
|
```env
|
|
106
106
|
VITE_SUPABASE_URL=your_supabase_project_url
|
|
107
|
-
|
|
107
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=your_supabase_publishable_key
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
Create `src/lib/supabase.ts`:
|
|
@@ -113,7 +113,7 @@ Create `src/lib/supabase.ts`:
|
|
|
113
113
|
import { createClient } from '@supabase/supabase-js';
|
|
114
114
|
|
|
115
115
|
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL!;
|
|
116
|
-
const
|
|
116
|
+
const supabasePublishableKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY!;
|
|
117
117
|
|
|
118
118
|
export const supabase = createClient(supabaseUrl, supabaseAnonKey);
|
|
119
119
|
```
|
|
@@ -830,7 +830,7 @@ VITE_DEBUG_MODE=true
|
|
|
830
830
|
|
|
831
831
|
# New environment variables
|
|
832
832
|
VITE_SUPABASE_URL=https://your-project.supabase.co
|
|
833
|
-
|
|
833
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=your-publishable-key
|
|
834
834
|
VITE_APP_ENV=development
|
|
835
835
|
VITE_DEBUG=false
|
|
836
836
|
|
|
@@ -847,7 +847,7 @@ cp .env .env.backup
|
|
|
847
847
|
cat > .env << EOF
|
|
848
848
|
# Supabase Configuration
|
|
849
849
|
VITE_SUPABASE_URL=${VITE_SUPABASE_URL:-https://your-project.supabase.co}
|
|
850
|
-
|
|
850
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=${VITE_SUPABASE_PUBLISHABLE_KEY:-your-publishable-key}
|
|
851
851
|
|
|
852
852
|
# Application Configuration
|
|
853
853
|
VITE_APP_ENV=${VITE_APP_ENV:-development}
|
|
@@ -1133,7 +1133,7 @@ export class MigrationValidation {
|
|
|
1133
1133
|
static validateConfiguration(config: any) {
|
|
1134
1134
|
const required = [
|
|
1135
1135
|
'VITE_SUPABASE_URL',
|
|
1136
|
-
'
|
|
1136
|
+
'VITE_SUPABASE_PUBLISHABLE_KEY',
|
|
1137
1137
|
];
|
|
1138
1138
|
|
|
1139
1139
|
const warnings = [];
|
|
@@ -152,7 +152,7 @@ import { createClient } from '@supabase/supabase-js';
|
|
|
152
152
|
|
|
153
153
|
const supabase = createClient(
|
|
154
154
|
import.meta.env.VITE_SUPABASE_URL,
|
|
155
|
-
import.meta.env.
|
|
155
|
+
import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
|
|
156
156
|
);
|
|
157
157
|
|
|
158
158
|
// ⚠️ REQUIRED: Call setupRBAC before rendering
|
|
@@ -266,7 +266,7 @@ import { createClient } from '@supabase/supabase-js';
|
|
|
266
266
|
|
|
267
267
|
export const supabase = createClient(
|
|
268
268
|
import.meta.env.VITE_SUPABASE_URL,
|
|
269
|
-
import.meta.env.
|
|
269
|
+
import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
|
|
270
270
|
);
|
|
271
271
|
```
|
|
272
272
|
|
|
@@ -89,7 +89,7 @@ Create `.env.local`:
|
|
|
89
89
|
```bash
|
|
90
90
|
# .env.local
|
|
91
91
|
VITE_SUPABASE_URL=https://your-project.supabase.co
|
|
92
|
-
|
|
92
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=your-publishable-key-here
|
|
93
93
|
VITE_APP_NAME=pace-trac
|
|
94
94
|
```
|
|
95
95
|
|
|
@@ -225,7 +225,7 @@ Create `src/lib/supabase.ts`:
|
|
|
225
225
|
import { createClient } from '@supabase/supabase-js'
|
|
226
226
|
|
|
227
227
|
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
|
|
228
|
-
const
|
|
228
|
+
const supabasePublishableKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
|
|
229
229
|
|
|
230
230
|
if (!supabaseUrl || !supabaseAnonKey) {
|
|
231
231
|
throw new Error('Missing Supabase environment variables')
|
|
@@ -99,7 +99,7 @@ import '@jmruthers/pace-core/src/styles/core.css';
|
|
|
99
99
|
// Initialize Supabase
|
|
100
100
|
const supabase = createClient(
|
|
101
101
|
import.meta.env.VITE_SUPABASE_URL!,
|
|
102
|
-
import.meta.env.
|
|
102
|
+
import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY!
|
|
103
103
|
);
|
|
104
104
|
|
|
105
105
|
// ⚠️ REQUIRED: Setup RBAC before rendering
|
|
@@ -258,7 +258,7 @@ import App from './App';
|
|
|
258
258
|
// Initialize Supabase
|
|
259
259
|
const supabase = createClient(
|
|
260
260
|
import.meta.env.VITE_SUPABASE_URL!,
|
|
261
|
-
import.meta.env.
|
|
261
|
+
import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY!
|
|
262
262
|
);
|
|
263
263
|
|
|
264
264
|
// ⚠️ REQUIRED: Setup RBAC before rendering
|
package/docs/rbac/quick-start.md
CHANGED
|
@@ -88,7 +88,7 @@ Create `.env.local`:
|
|
|
88
88
|
# .env.local
|
|
89
89
|
VITE_SUPABASE_URL=https://your-project.supabase.co
|
|
90
90
|
# Accepts both legacy anon keys and modern publishable keys (sb_publishable_...)
|
|
91
|
-
|
|
91
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=your-publishable-key-here
|
|
92
92
|
VITE_APP_NAME=user-manager
|
|
93
93
|
```
|
|
94
94
|
|
|
@@ -213,7 +213,7 @@ Create `src/lib/supabase.ts`:
|
|
|
213
213
|
import { createClient } from '@supabase/supabase-js'
|
|
214
214
|
|
|
215
215
|
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
|
|
216
|
-
const
|
|
216
|
+
const supabasePublishableKey = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
|
|
217
217
|
|
|
218
218
|
if (!supabaseUrl || !supabaseAnonKey) {
|
|
219
219
|
throw new Error('Missing Supabase environment variables')
|
package/docs/security/README.md
CHANGED
|
@@ -139,10 +139,10 @@ function ProtectedComponent() {
|
|
|
139
139
|
|
|
140
140
|
### 3. Inactivity Auto-Logout
|
|
141
141
|
|
|
142
|
-
PACE Core includes built-in inactivity tracking for enhanced security:
|
|
142
|
+
PACE Core includes built-in inactivity tracking for enhanced security. **All inactivity timeout props are mandatory** - apps must explicitly configure them:
|
|
143
143
|
|
|
144
|
-
- **Automatic logout** after
|
|
145
|
-
- **Warning modal** appears
|
|
144
|
+
- **Automatic logout** after configured period of inactivity (must be configured)
|
|
145
|
+
- **Warning modal** appears before logout (must be configured)
|
|
146
146
|
- **Cross-tab synchronization** - activity in any tab resets the timer
|
|
147
147
|
- **Persistence** - survives page reloads and browser restarts
|
|
148
148
|
- **Production-safe** - cannot be disabled in production builds
|
|
@@ -597,7 +597,7 @@ Secure configuration using environment variables:
|
|
|
597
597
|
```bash
|
|
598
598
|
# Authentication
|
|
599
599
|
VITE_SUPABASE_URL=your_supabase_url
|
|
600
|
-
|
|
600
|
+
VITE_SUPABASE_PUBLISHABLE_KEY=your_publishable_key
|
|
601
601
|
VITE_SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
|
|
602
602
|
|
|
603
603
|
# Security
|