@jmruthers/pace-core 0.5.134 → 0.5.136
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/dist/{DataTable-C7GaRZye.d.ts → DataTable-CWAZZcXC.d.ts} +1 -1
- package/dist/{DataTable-A36PJG6N.js → DataTable-CYOHOX3O.js} +25 -13
- package/dist/{PublicLoadingSpinner-CUAnTvcg.d.ts → EventLogo-801uofbR.d.ts} +51 -135
- package/dist/UnifiedAuthProvider-5E5TUNMS.js +17 -0
- package/dist/{UnifiedAuthProvider-BVKmQd9u.d.ts → UnifiedAuthProvider-DJxGTftH.d.ts} +1 -1
- package/dist/{api-TNIBJWLM.js → api-45XYYO2A.js} +4 -3
- package/dist/{audit-T36HM7IM.js → audit-64X3VJXB.js} +3 -2
- package/dist/{chunk-CTJRBUX2.js → chunk-2TWNJ46Y.js} +2 -2
- package/dist/{chunk-UJI6WSMD.js → chunk-444EZN6N.js} +3 -3
- package/dist/chunk-444EZN6N.js.map +1 -0
- package/dist/{chunk-3CG5L6RN.js → chunk-4MT5BGGL.js} +90 -73
- package/dist/chunk-4MT5BGGL.js.map +1 -0
- package/dist/{chunk-PYUXFQJ3.js → chunk-56XJ3TU6.js} +2 -2
- package/dist/chunk-56XJ3TU6.js.map +1 -0
- package/dist/chunk-5DPZ5EAT.js +60 -0
- package/dist/chunk-5DPZ5EAT.js.map +1 -0
- package/dist/{chunk-66C4BSAY.js → chunk-ANBQRTPX.js} +9 -2
- package/dist/chunk-ANBQRTPX.js.map +1 -0
- package/dist/chunk-APIBCTL2.js +670 -0
- package/dist/chunk-APIBCTL2.js.map +1 -0
- package/dist/{chunk-GKHF54DI.js → chunk-BESYRHQM.js} +10 -4
- package/dist/chunk-BESYRHQM.js.map +1 -0
- package/dist/{chunk-WP5I5GLN.js → chunk-BVYWGZVV.js} +112 -97
- package/dist/chunk-BVYWGZVV.js.map +1 -0
- package/dist/{chunk-GEVIB2UB.js → chunk-ERISIBYU.js} +14 -5
- package/dist/chunk-ERISIBYU.js.map +1 -0
- package/dist/{chunk-CQZU6TFE.js → chunk-FHWWBIHA.js} +100 -62
- package/dist/chunk-FHWWBIHA.js.map +1 -0
- package/dist/{chunk-O3NWNXDY.js → chunk-FMUCXFII.js} +2 -2
- package/dist/chunk-FMUCXFII.js.map +1 -0
- package/dist/{chunk-GVDR7WNV.js → chunk-HJGGOMQ6.js} +194 -518
- package/dist/chunk-HJGGOMQ6.js.map +1 -0
- package/dist/{chunk-BDZUMRBD.js → chunk-K2WWTH7O.js} +13 -6
- package/dist/chunk-K2WWTH7O.js.map +1 -0
- package/dist/{chunk-BYXRHAIF.js → chunk-L6PGMCMD.js} +23 -14
- package/dist/chunk-L6PGMCMD.js.map +1 -0
- package/dist/chunk-LMC26NLJ.js +84 -0
- package/dist/chunk-LMC26NLJ.js.map +1 -0
- package/dist/{chunk-M6DDYFUD.js → chunk-LS353YLY.js} +19 -16
- package/dist/chunk-LS353YLY.js.map +1 -0
- package/dist/{chunk-ZYZCRSBD.js → chunk-LTV3XIJJ.js} +16 -11
- package/dist/chunk-LTV3XIJJ.js.map +1 -0
- package/dist/{chunk-HMNOSGVA.js → chunk-NOHEVYVX.js} +377 -666
- package/dist/chunk-NOHEVYVX.js.map +1 -0
- package/dist/{chunk-JCQZ6LA7.js → chunk-Q5QRDWKI.js} +9 -3
- package/dist/chunk-Q5QRDWKI.js.map +1 -0
- package/dist/chunk-S5OFRT4M.js +94 -0
- package/dist/chunk-S5OFRT4M.js.map +1 -0
- package/dist/{chunk-3DBFLLLU.js → chunk-SBVILCCA.js} +14 -9
- package/dist/chunk-SBVILCCA.js.map +1 -0
- package/dist/{chunk-TGIY2AR2.js → chunk-SL2YQDR6.js} +4 -3
- package/dist/{chunk-TGIY2AR2.js.map → chunk-SL2YQDR6.js.map} +1 -1
- package/dist/{chunk-VZ5OR6HD.js → chunk-TVYPTYOY.js} +55 -179
- package/dist/chunk-TVYPTYOY.js.map +1 -0
- package/dist/{chunk-ZV77RZMU.js → chunk-XARJS7CD.js} +2 -2
- package/dist/chunk-XDNLUEXI.js +138 -0
- package/dist/chunk-XDNLUEXI.js.map +1 -0
- package/dist/{chunk-F64FFPOZ.js → chunk-YLKIDTUK.js} +26 -20
- package/dist/chunk-YLKIDTUK.js.map +1 -0
- package/dist/{chunk-5F3NDPJV.js → chunk-ZZ2SS7NI.js} +10 -5
- package/dist/chunk-ZZ2SS7NI.js.map +1 -0
- package/dist/components.d.ts +7 -287
- package/dist/components.js +26 -157
- package/dist/components.js.map +1 -1
- package/dist/{file-reference-C9isKNPn.d.ts → file-reference-C6Gkn77H.d.ts} +1 -1
- package/dist/{formatting-DFcCxUEk.d.ts → formatting-CvUXy2mF.d.ts} +1 -1
- package/dist/hooks.d.ts +3 -3
- package/dist/hooks.js +22 -16
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +219 -9
- package/dist/index.js +49 -31
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +1 -1
- package/dist/providers.js +5 -4
- package/dist/rbac/index.js +13 -12
- package/dist/styles/index.js +2 -1
- package/dist/theming/runtime.d.ts +2 -19
- package/dist/theming/runtime.js +2 -1
- package/dist/{types-D5rqZQXk.d.ts → types-Dfz9dmVH.d.ts} +12 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.js +1 -1
- package/dist/{useInactivityTracker-MRUU55XI.js → useInactivityTracker-TO6ZOF35.js} +3 -2
- package/dist/{usePublicRouteParams-Dyt1tzI9.d.ts → usePublicRouteParams-B7PabvuH.d.ts} +1 -1
- package/dist/utils.d.ts +195 -232
- package/dist/utils.js +173 -331
- package/dist/utils.js.map +1 -1
- package/dist/{validation-DnhrNMju.d.ts → validation-8npbysjg.d.ts} +26 -8
- package/dist/validation.d.ts +261 -10
- package/dist/validation.js +82 -440
- package/dist/validation.js.map +1 -1
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +6 -6
- package/docs/api/classes/InvalidScopeError.md +1 -1
- package/docs/api/classes/MissingUserContextError.md +1 -1
- package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
- package/docs/api/classes/PermissionDeniedError.md +1 -1
- package/docs/api/classes/PublicErrorBoundary.md +1 -1
- package/docs/api/classes/RBACAuditManager.md +6 -6
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +7 -7
- package/docs/api/classes/RBACError.md +1 -1
- package/docs/api/classes/RBACNotInitializedError.md +1 -1
- package/docs/api/classes/SecureSupabaseClient.md +1 -1
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +4 -4
- package/docs/api/interfaces/ButtonProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +1 -1
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +29 -4
- package/docs/api/interfaces/DataAccessRecord.md +9 -9
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +18 -18
- package/docs/api/interfaces/DataTableColumn.md +61 -1
- package/docs/api/interfaces/DataTableProps.md +3 -3
- package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
- package/docs/api/interfaces/EmptyStateConfig.md +5 -5
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +14 -14
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/EventLogoProps.md +152 -0
- package/docs/api/interfaces/ExportColumn.md +90 -0
- package/docs/api/interfaces/ExportOptions.md +126 -0
- package/docs/api/interfaces/FileDisplayProps.md +15 -15
- package/docs/api/interfaces/FileMetadata.md +1 -1
- package/docs/api/interfaces/FileReference.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +1 -1
- package/docs/api/interfaces/FooterProps.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/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 +10 -10
- 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 +27 -27
- package/docs/api/interfaces/PaceLoginPageProps.md +4 -4
- package/docs/api/interfaces/PageAccessRecord.md +8 -8
- package/docs/api/interfaces/PagePermissionContextType.md +8 -8
- package/docs/api/interfaces/PagePermissionGuardProps.md +11 -11
- package/docs/api/interfaces/PagePermissionProviderProps.md +7 -7
- package/docs/api/interfaces/PaletteData.md +4 -4
- package/docs/api/interfaces/PermissionEnforcerProps.md +11 -11
- package/docs/api/interfaces/ProtectedRouteProps.md +6 -6
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
- package/docs/api/interfaces/PublicLoadingSpinnerProps.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/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACLogger.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/SecureDataContextType.md +9 -9
- package/docs/api/interfaces/SecureDataProviderProps.md +8 -8
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +21 -0
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/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/UseInactivityTrackerOptions.md +9 -9
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +8 -8
- package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
- package/docs/api/interfaces/UsePublicEventReturn.md +5 -5
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +4 -4
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +9 -9
- 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/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 +648 -212
- package/docs/api-reference/components.md +106 -26
- package/docs/architecture/README.md +0 -2
- package/docs/implementation-guides/data-tables.md +277 -13
- package/docs/implementation-guides/forms.md +1 -16
- package/docs/implementation-guides/permission-enforcement.md +8 -2
- package/examples/README.md +30 -14
- package/examples/STRUCTURE.md +125 -0
- package/examples/components/DataTable/HierarchicalActionsExample.tsx +421 -0
- package/examples/components/DataTable/HierarchicalExample.tsx +475 -0
- package/examples/components/DataTable/InitialPageSizeExample.tsx +177 -0
- package/examples/components/DataTable/PerformanceExample.tsx +506 -0
- package/examples/components/DataTable/index.ts +13 -0
- package/examples/components/Dialog/BasicHtmlTest.tsx +55 -0
- package/examples/components/Dialog/DebugHtmlExample.tsx +68 -0
- package/examples/components/Dialog/HtmlDialogExample.tsx +202 -0
- package/examples/components/Dialog/ScrollableDialogExample.tsx +290 -0
- package/examples/components/Dialog/SimpleHtmlTest.tsx +61 -0
- package/examples/components/Dialog/SmartDialogExample.tsx +322 -0
- package/examples/components/Dialog/index.ts +15 -0
- package/examples/components/index.ts +11 -0
- package/examples/features/index.ts +12 -0
- package/examples/{public-pages → features/public-pages}/CorrectPublicPageImplementation.tsx +1 -1
- package/examples/{public-pages → features/public-pages}/PublicEventPage.tsx +1 -1
- package/examples/{public-pages → features/public-pages}/PublicPageApp.tsx +1 -1
- package/examples/{public-pages → features/public-pages}/PublicPageUsageExample.tsx +1 -1
- package/examples/index.ts +11 -3
- package/package.json +30 -10
- package/src/components/Alert/Alert.tsx +1 -1
- package/src/components/Avatar/Avatar.tsx +1 -1
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/Card/Card.tsx +1 -1
- package/src/components/Checkbox/Checkbox.tsx +1 -1
- package/src/components/DataTable/DataTable.test.tsx +1 -1
- package/src/components/DataTable/DataTable.tsx +1 -30
- package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +562 -0
- package/src/components/DataTable/__tests__/styles.test.ts +2 -2
- package/src/components/DataTable/components/ActionButtons.tsx +0 -15
- package/src/components/DataTable/components/DataTableCore.tsx +4 -185
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +1 -1
- package/src/components/DataTable/components/DataTableModals.tsx +1 -27
- package/src/components/DataTable/components/EditableRow.tsx +1 -1
- package/src/components/DataTable/components/ImportModal.tsx +2 -14
- package/src/components/DataTable/components/PaginationControls.tsx +1 -1
- package/src/components/DataTable/components/UnifiedTableBody.tsx +109 -82
- package/src/components/DataTable/components/__tests__/ActionButtons.test.tsx +1 -1
- package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +1 -1
- package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +1 -1
- package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +1 -1
- package/src/components/DataTable/examples/GroupingAggregationExample.tsx +273 -0
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +1 -1
- package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +1 -1
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +1 -1
- package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +1 -1
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +2 -23
- package/src/components/DataTable/index.ts +4 -0
- package/src/components/DataTable/styles.ts +1 -1
- package/src/components/DataTable/types.ts +13 -0
- package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +1 -1
- package/src/components/DataTable/utils/aggregationUtils.ts +161 -0
- package/src/components/DataTable/utils/exportUtils.ts +1 -1
- package/src/components/DataTable/utils/flexibleImport.ts +1 -11
- package/src/components/DataTable/utils/index.ts +1 -0
- package/src/components/DataTable/utils/paginationUtils.ts +1 -1
- package/src/components/Dialog/Dialog.tsx +2 -2
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +35 -7
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +5 -4
- package/src/components/EventSelector/EventSelector.tsx +3 -2
- package/src/components/FileDisplay/FileDisplay.tsx +2 -36
- package/src/components/FileUpload/FileUpload.test.tsx +2 -2
- package/src/components/FileUpload/FileUpload.tsx +2 -2
- package/src/components/Footer/Footer.tsx +1 -1
- package/src/components/Form/Form.test.tsx +4 -509
- package/src/components/Form/Form.tsx +1 -1
- package/src/components/Form/FormField.tsx +1 -1
- package/src/components/Form/index.ts +0 -12
- package/src/components/Header/Header.tsx +1 -1
- package/src/components/Input/Input.tsx +1 -1
- package/src/components/Label/Label.tsx +1 -1
- package/src/components/LoginForm/LoginForm.tsx +1 -1
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +19 -3
- package/src/components/NavigationMenu/NavigationMenu.tsx +9 -8
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +4 -3
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +14 -12
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.integration.test.tsx +0 -16
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +0 -1
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -9
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +35 -3
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +13 -12
- package/src/components/PasswordReset/PasswordChangeForm.tsx +1 -1
- package/src/components/PasswordReset/index.ts +0 -2
- package/src/components/Progress/Progress.tsx +1 -1
- package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +35 -8
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +3 -2
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +1 -1
- package/src/components/PublicLayout/PublicLoadingSpinner.tsx +1 -1
- package/src/components/PublicLayout/PublicPageContextChecker.tsx +44 -43
- package/src/components/PublicLayout/PublicPageFooter.tsx +1 -1
- package/src/components/PublicLayout/PublicPageHeader.tsx +1 -15
- package/src/components/PublicLayout/PublicPageProvider.tsx +3 -2
- package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +2 -0
- package/src/components/PublicLayout/index.ts +4 -2
- package/src/components/Select/Select.tsx +1 -1
- package/src/components/{SessionRestorationLoader.tsx → SessionRestorationLoader/SessionRestorationLoader.tsx} +3 -2
- package/src/components/SessionRestorationLoader/index.ts +3 -0
- package/src/components/Switch/Switch.tsx +1 -1
- package/src/components/Table/Table.tsx +1 -1
- package/src/components/Toast/Toast.tsx +1 -1
- package/src/components/Tooltip/Tooltip.tsx +1 -1
- package/src/components/index.ts +4 -10
- package/src/hooks/__tests__/hooks.integration.test.tsx +37 -22
- package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +33 -17
- package/src/hooks/__tests__/useDataTablePerformance.unit.test.ts +28 -3
- package/src/hooks/__tests__/useFileDisplay.unit.test.ts +36 -9
- package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +26 -2
- package/src/hooks/__tests__/usePerformanceMonitor.unit.test.ts +19 -6
- package/src/hooks/__tests__/usePermissionCache.simple.test.ts +17 -4
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +17 -4
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +26 -6
- package/src/hooks/__tests__/usePublicFileDisplay.test.ts +16 -6
- package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +3 -3
- package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +17 -3
- package/src/hooks/public/usePublicEvent.ts +7 -6
- package/src/hooks/public/usePublicEventLogo.ts +7 -4
- package/src/hooks/public/usePublicFileDisplay.ts +6 -150
- package/src/hooks/useComponentPerformance.ts +4 -1
- package/src/hooks/useDataTablePerformance.ts +4 -3
- package/src/hooks/useEventTheme.test.ts +18 -5
- package/src/hooks/useEventTheme.ts +4 -1
- package/src/hooks/useEvents.ts +2 -0
- package/src/hooks/useFileDisplay.ts +9 -8
- package/src/hooks/useFileReference.ts +4 -1
- package/src/hooks/useFileUrl.ts +4 -1
- package/src/hooks/useInactivityTracker.ts +5 -4
- package/src/hooks/useOrganisationSecurity.test.ts +33 -12
- package/src/hooks/useOrganisationSecurity.ts +8 -7
- package/src/hooks/usePerformanceMonitor.ts +6 -3
- package/src/hooks/usePermissionCache.ts +13 -6
- package/src/hooks/useSecureDataAccess.test.ts +2 -2
- package/src/hooks/useSecureDataAccess.ts +9 -8
- package/src/hooks/useSessionRestoration.ts +4 -1
- package/src/hooks/useStorage.ts +4 -1
- package/src/index.ts +25 -8
- package/src/providers/services/AuthServiceProvider.tsx +3 -2
- package/src/providers/services/EventServiceProvider.tsx +2 -1
- package/src/providers/services/InactivityServiceProvider.tsx +2 -1
- package/src/providers/services/OrganisationServiceProvider.tsx +2 -1
- package/src/providers/services/UnifiedAuthProvider.tsx +4 -3
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +22 -2
- package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +24 -2
- package/src/rbac/__tests__/cache-invalidation.test.ts +20 -6
- package/src/rbac/api.ts +5 -2
- package/src/rbac/audit-enhanced.ts +6 -6
- package/src/rbac/audit.test.ts +60 -38
- package/src/rbac/audit.ts +8 -8
- package/src/rbac/cache-invalidation.ts +7 -4
- package/src/rbac/components/EnhancedNavigationMenu.tsx +11 -5
- package/src/rbac/components/NavigationGuard.tsx +7 -3
- package/src/rbac/components/NavigationProvider.tsx +6 -3
- package/src/rbac/components/PagePermissionGuard.tsx +28 -16
- package/src/rbac/components/PagePermissionProvider.tsx +4 -1
- package/src/rbac/components/PermissionEnforcer.tsx +9 -3
- package/src/rbac/components/RoleBasedRouter.tsx +3 -1
- package/src/rbac/components/SecureDataProvider.tsx +7 -3
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +87 -61
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +83 -33
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +36 -13
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +2 -2
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +22 -8
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +19 -6
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +43 -17
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +42 -17
- package/src/rbac/engine.ts +15 -7
- package/src/rbac/hooks/usePermissions.ts +7 -3
- package/src/rbac/hooks/useResolvedScope.test.ts +2 -2
- package/src/rbac/hooks/useResolvedScope.ts +10 -7
- package/src/rbac/permissions.ts +5 -2
- package/src/rbac/security.test.ts +27 -16
- package/src/rbac/security.ts +5 -4
- package/src/services/AuthService.ts +22 -21
- package/src/services/EventService.ts +12 -12
- package/src/services/InactivityService.ts +5 -4
- package/src/services/OrganisationService.ts +26 -25
- package/src/services/__tests__/AuthService.test.ts +51 -19
- package/src/services/__tests__/EventService.test.ts +37 -5
- package/src/services/__tests__/InactivityService.test.ts +38 -4
- package/src/services/__tests__/OrganisationService.test.ts +3 -8
- package/src/services/base/BaseService.ts +3 -1
- package/src/theming/__tests__/runtime.test.ts +21 -12
- package/src/theming/parseEventColours.ts +5 -19
- package/src/theming/runtime.ts +8 -4
- package/src/types/validation.ts +2 -29
- package/src/utils/__tests__/appConfig.unit.test.ts +1 -1
- package/src/utils/__tests__/audit.unit.test.ts +1 -1
- package/src/utils/__tests__/auth-utils.unit.test.ts +1 -1
- package/src/utils/__tests__/bundleAnalysis.unit.test.ts +19 -19
- package/src/utils/__tests__/cn.unit.test.ts +1 -1
- package/src/utils/__tests__/debugLogger.test.ts +1 -1
- package/src/utils/__tests__/deviceFingerprint.unit.test.ts +1 -1
- package/src/utils/__tests__/dynamicUtils.unit.test.ts +1 -1
- package/src/utils/__tests__/formatting.unit.test.ts +1 -1
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +1 -1
- package/src/utils/__tests__/logger.unit.test.ts +1 -1
- package/src/utils/__tests__/organisationContext.unit.test.ts +1 -1
- package/src/utils/__tests__/performanceBenchmark.test.ts +1 -1
- package/src/utils/__tests__/performanceBudgets.unit.test.ts +1 -1
- package/src/utils/__tests__/permissionTypes.unit.test.ts +1 -1
- package/src/utils/__tests__/permissionUtils.unit.test.ts +1 -1
- package/src/utils/__tests__/sanitization.unit.test.ts +1 -1
- package/src/utils/__tests__/schemaUtils.unit.test.ts +1 -1
- package/src/utils/__tests__/secureDataAccess.unit.test.ts +1 -1
- package/src/utils/__tests__/secureErrors.unit.test.ts +33 -15
- package/src/utils/__tests__/secureStorage.unit.test.ts +1 -1
- package/src/utils/__tests__/security.unit.test.ts +40 -18
- package/src/utils/__tests__/securityMonitor.unit.test.ts +1 -1
- package/src/utils/__tests__/sessionTracking.unit.test.ts +40 -29
- package/src/utils/__tests__/validationUtils.unit.test.ts +19 -6
- package/src/utils/{appIdResolver.test.ts → app/appIdResolver.test.ts} +28 -30
- package/src/utils/{appIdResolver.ts → app/appIdResolver.ts} +8 -5
- package/src/utils/{appNameResolver.test.ts → app/appNameResolver.test.ts} +1 -1
- package/src/utils/{appNameResolver.ts → app/appNameResolver.ts} +5 -1
- package/src/utils/{organisationContext.ts → context/organisationContext.ts} +6 -3
- package/src/utils/{sessionTracking.ts → context/sessionTracking.ts} +11 -12
- package/src/utils/{logger.ts → core/logger.ts} +4 -2
- package/src/utils/{deviceFingerprint.ts → device/deviceFingerprint.ts} +1 -1
- package/src/utils/{lazyLoad.tsx → dynamic/lazyLoad.tsx} +2 -2
- package/src/utils/{file-reference.test.ts → file-reference/__tests__/file-reference.test.ts} +5 -5
- package/src/utils/{file-reference.ts → file-reference/index.ts} +20 -38
- package/src/utils/index.ts +32 -54
- package/src/utils/{secureErrors.ts → security/secureErrors.ts} +6 -3
- package/src/utils/{security.ts → security/security.ts} +5 -2
- package/src/utils/storage/__tests__/helpers.unit.test.ts +1 -4
- package/src/utils/storage/helpers.ts +15 -8
- package/src/{components/Dialog/utils/__tests__/safeHtml.unit.test.ts → utils/validation/__tests__/htmlSanitization.unit.test.ts} +9 -15
- package/src/{validation → utils/validation}/csrf.ts +1 -1
- package/src/{components/Dialog/utils/safeHtml.ts → utils/validation/htmlSanitization.ts} +9 -10
- package/src/utils/validation/index.ts +79 -0
- package/src/utils/{sanitization.ts → validation/sanitization.ts} +71 -2
- package/src/{validation/schemaUtils.ts → utils/validation/schema.ts} +11 -6
- package/src/{validation → utils/validation}/sqlInjectionProtection.ts +2 -0
- package/src/utils/{validationUtils.ts → validation/validationUtils.ts} +4 -1
- package/src/validation/index.ts +3 -34
- package/dist/UnifiedAuthProvider-CQDZRJIS.js +0 -16
- package/dist/chunk-24MKLB7U.js +0 -81
- package/dist/chunk-24MKLB7U.js.map +0 -1
- package/dist/chunk-3CG5L6RN.js.map +0 -1
- package/dist/chunk-3DBFLLLU.js.map +0 -1
- package/dist/chunk-5F3NDPJV.js.map +0 -1
- package/dist/chunk-66C4BSAY.js.map +0 -1
- package/dist/chunk-BDZUMRBD.js.map +0 -1
- package/dist/chunk-BYXRHAIF.js.map +0 -1
- package/dist/chunk-CDQ3PX7L.js +0 -18
- package/dist/chunk-CDQ3PX7L.js.map +0 -1
- package/dist/chunk-CQZU6TFE.js.map +0 -1
- package/dist/chunk-F64FFPOZ.js.map +0 -1
- package/dist/chunk-GEVIB2UB.js.map +0 -1
- package/dist/chunk-GKHF54DI.js.map +0 -1
- package/dist/chunk-GVDR7WNV.js.map +0 -1
- package/dist/chunk-HMNOSGVA.js.map +0 -1
- package/dist/chunk-JCQZ6LA7.js.map +0 -1
- package/dist/chunk-M6DDYFUD.js.map +0 -1
- package/dist/chunk-O3NWNXDY.js.map +0 -1
- package/dist/chunk-PYUXFQJ3.js.map +0 -1
- package/dist/chunk-UJI6WSMD.js.map +0 -1
- package/dist/chunk-VZ5OR6HD.js.map +0 -1
- package/dist/chunk-WP5I5GLN.js.map +0 -1
- package/dist/chunk-ZYZCRSBD.js.map +0 -1
- package/src/components/Dialog/README.md +0 -804
- package/src/components/Form/FormErrorSummary.tsx +0 -113
- package/src/components/Form/FormFieldset.tsx +0 -127
- package/src/components/Form/FormLiveRegion.tsx +0 -198
- package/src/components/PasswordReset/PasswordResetForm.test.tsx +0 -597
- package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
- package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
- package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
- package/src/components/PublicLayout/__tests__/PublicPageDebugger.test.tsx +0 -185
- package/src/examples/CorrectPublicPageImplementation.tsx +0 -304
- package/src/examples/PublicEventPage.tsx +0 -287
- package/src/examples/PublicPageApp.tsx +0 -321
- package/src/examples/PublicPageUsageExample.tsx +0 -218
- package/src/utils/schemaUtils.ts +0 -37
- package/src/validation/__tests__/common.unit.test.ts +0 -101
- package/src/validation/__tests__/csrf.unit.test.ts +0 -365
- package/src/validation/__tests__/passwordSchema.unit.test.ts +0 -203
- package/src/validation/__tests__/sanitization.unit.test.ts +0 -250
- package/src/validation/__tests__/schemaUtils.unit.test.ts +0 -451
- package/src/validation/__tests__/sqlInjectionProtection.unit.test.ts +0 -462
- package/src/validation/__tests__/user.unit.test.ts +0 -440
- package/src/validation/sanitization.ts +0 -96
- /package/dist/{DataTable-A36PJG6N.js.map → DataTable-CYOHOX3O.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-CQDZRJIS.js.map → UnifiedAuthProvider-5E5TUNMS.js.map} +0 -0
- /package/dist/{api-TNIBJWLM.js.map → api-45XYYO2A.js.map} +0 -0
- /package/dist/{audit-T36HM7IM.js.map → audit-64X3VJXB.js.map} +0 -0
- /package/dist/{chunk-CTJRBUX2.js.map → chunk-2TWNJ46Y.js.map} +0 -0
- /package/dist/{chunk-ZV77RZMU.js.map → chunk-XARJS7CD.js.map} +0 -0
- /package/dist/{useInactivityTracker-MRUU55XI.js.map → useInactivityTracker-TO6ZOF35.js.map} +0 -0
- /package/examples/{public-pages → features/public-pages}/index.ts +0 -0
- /package/examples/{RBAC → features/rbac}/CompleteRBACExample.tsx +0 -0
- /package/examples/{RBAC → features/rbac}/EventBasedApp.tsx +0 -0
- /package/examples/{RBAC → features/rbac}/PermissionExample.tsx +0 -0
- /package/examples/{RBAC → features/rbac}/index.ts +0 -0
- /package/src/utils/{appConfig.ts → app/appConfig.ts} +0 -0
- /package/src/utils/{appNameResolver.simple.test.ts → app/appNameResolver.simple.test.ts} +0 -0
- /package/src/utils/{audit.ts → audit/audit.ts} +0 -0
- /package/src/utils/{organisationContext.test.ts → context/organisationContext.test.ts} +0 -0
- /package/src/utils/{cn.ts → core/cn.ts} +0 -0
- /package/src/utils/{debugLogger.ts → core/debugLogger.ts} +0 -0
- /package/src/utils/{dynamicUtils.ts → dynamic/dynamicUtils.ts} +0 -0
- /package/src/utils/{formatDate.test.ts → formatting/formatDate.test.ts} +0 -0
- /package/src/utils/{formatting.ts → formatting/formatting.ts} +0 -0
- /package/src/utils/{bundleAnalysis.ts → performance/bundleAnalysis.ts} +0 -0
- /package/src/utils/{performanceBenchmark.ts → performance/performanceBenchmark.ts} +0 -0
- /package/src/utils/{performanceBudgets.ts → performance/performanceBudgets.ts} +0 -0
- /package/src/utils/{permissionTypes.ts → permissions/permissionTypes.ts} +0 -0
- /package/src/utils/{permissionUtils.test.ts → permissions/permissionUtils.test.ts} +0 -0
- /package/src/utils/{permissionUtils.ts → permissions/permissionUtils.ts} +0 -0
- /package/src/utils/{auth-utils.ts → security/auth-utils.ts} +0 -0
- /package/src/utils/{secureDataAccess.test.ts → security/secureDataAccess.test.ts} +0 -0
- /package/src/utils/{secureDataAccess.ts → security/secureDataAccess.ts} +0 -0
- /package/src/utils/{secureStorage.ts → security/secureStorage.ts} +0 -0
- /package/src/utils/{securityMonitor.ts → security/securityMonitor.ts} +0 -0
- /package/src/{validation → utils/validation}/common.ts +0 -0
- /package/src/{validation → utils/validation}/passwordSchema.ts +0 -0
- /package/src/{validation → utils/validation}/user.ts +0 -0
- /package/src/utils/{validation.ts → validation/validation.ts} +0 -0
|
@@ -2,29 +2,34 @@ import {
|
|
|
2
2
|
init_useOrganisations,
|
|
3
3
|
useEvents,
|
|
4
4
|
useOrganisations
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-SL2YQDR6.js";
|
|
6
6
|
import {
|
|
7
7
|
init_UnifiedAuthProvider
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-2TWNJ46Y.js";
|
|
9
9
|
import {
|
|
10
10
|
OrganisationServiceContext,
|
|
11
11
|
OrganisationServiceProvider,
|
|
12
12
|
init_OrganisationServiceProvider,
|
|
13
13
|
useOrganisationService,
|
|
14
14
|
useUnifiedAuth
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-4MT5BGGL.js";
|
|
16
16
|
import {
|
|
17
17
|
cn
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-56XJ3TU6.js";
|
|
19
19
|
import {
|
|
20
20
|
init_organisationContext,
|
|
21
21
|
setOrganisationContext
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-K2WWTH7O.js";
|
|
23
23
|
import {
|
|
24
24
|
applyPalette,
|
|
25
25
|
clearPalette,
|
|
26
26
|
parseAndNormalizeEventColours
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-ERISIBYU.js";
|
|
28
|
+
import {
|
|
29
|
+
createLogger,
|
|
30
|
+
init_logger,
|
|
31
|
+
logger
|
|
32
|
+
} from "./chunk-XDNLUEXI.js";
|
|
28
33
|
import {
|
|
29
34
|
__esm,
|
|
30
35
|
__export
|
|
@@ -50,6 +55,8 @@ var init_OrganisationProvider = __esm({
|
|
|
50
55
|
// src/hooks/useEventTheme.ts
|
|
51
56
|
import { useEffect } from "react";
|
|
52
57
|
import { useLocation } from "react-router-dom";
|
|
58
|
+
init_logger();
|
|
59
|
+
var log = createLogger("useEventTheme");
|
|
53
60
|
function useEventTheme(event) {
|
|
54
61
|
const location = useLocation();
|
|
55
62
|
let selectedEvent;
|
|
@@ -86,7 +93,7 @@ function useEventTheme(event) {
|
|
|
86
93
|
try {
|
|
87
94
|
applyPalette(normalized);
|
|
88
95
|
} catch (error) {
|
|
89
|
-
|
|
96
|
+
log.error("Failed to apply event palette:", error);
|
|
90
97
|
}
|
|
91
98
|
return () => {
|
|
92
99
|
};
|
|
@@ -252,6 +259,7 @@ function DefaultPublicErrorFallback({
|
|
|
252
259
|
// src/components/PublicLayout/PublicPageProvider.tsx
|
|
253
260
|
import { createContext, useContext, useMemo } from "react";
|
|
254
261
|
import { createClient } from "@supabase/supabase-js";
|
|
262
|
+
init_logger();
|
|
255
263
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
256
264
|
var PublicPageContext = createContext(void 0);
|
|
257
265
|
function PublicPageProvider({ children, appName }) {
|
|
@@ -268,11 +276,11 @@ function PublicPageProvider({ children, appName }) {
|
|
|
268
276
|
const supabaseKey = getEnvVar("VITE_SUPABASE_ANON_KEY") || getEnvVar("NEXT_PUBLIC_SUPABASE_ANON_KEY") || null;
|
|
269
277
|
const supabase = useMemo(() => {
|
|
270
278
|
if (!supabaseUrl || !supabaseKey) {
|
|
271
|
-
|
|
279
|
+
logger.warn("PublicPageProvider", "Missing Supabase environment variables. Please ensure VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY are set in your environment.");
|
|
272
280
|
return null;
|
|
273
281
|
}
|
|
274
282
|
const client = createClient(supabaseUrl, supabaseKey);
|
|
275
|
-
|
|
283
|
+
logger.info("PublicPageProvider", "Supabase client created successfully for public pages");
|
|
276
284
|
return client;
|
|
277
285
|
}, [supabaseUrl, supabaseKey]);
|
|
278
286
|
const contextValue = {
|
|
@@ -415,6 +423,8 @@ function validateFileSize(file) {
|
|
|
415
423
|
}
|
|
416
424
|
|
|
417
425
|
// src/utils/storage/helpers.ts
|
|
426
|
+
init_logger();
|
|
427
|
+
var log2 = createLogger("StorageHelpers");
|
|
418
428
|
function generateFilePath(options, fileName) {
|
|
419
429
|
const { orgId, isPublic = false, customPath } = options;
|
|
420
430
|
if (!orgId) {
|
|
@@ -461,13 +471,11 @@ async function extractFileMetadata(file, options, uploadedBy) {
|
|
|
461
471
|
metadata.width = dimensions.width;
|
|
462
472
|
metadata.height = dimensions.height;
|
|
463
473
|
} catch (error) {
|
|
464
|
-
console.warn("Could not extract image dimensions:", error);
|
|
465
474
|
}
|
|
466
475
|
}
|
|
467
476
|
try {
|
|
468
477
|
metadata.hash = await generateFileHash(file);
|
|
469
478
|
} catch (error) {
|
|
470
|
-
console.warn("Could not generate file hash:", error);
|
|
471
479
|
}
|
|
472
480
|
return metadata;
|
|
473
481
|
}
|
|
@@ -594,7 +602,7 @@ async function getSignedUrl(supabase, path, options) {
|
|
|
594
602
|
const bucketName = getBucketName(false);
|
|
595
603
|
const { data, error } = await supabase.storage.from(bucketName).createSignedUrl(path, options.expiresIn || 3600);
|
|
596
604
|
if (error) {
|
|
597
|
-
|
|
605
|
+
log2.error("Failed to create signed URL:", error);
|
|
598
606
|
return null;
|
|
599
607
|
}
|
|
600
608
|
return {
|
|
@@ -602,7 +610,7 @@ async function getSignedUrl(supabase, path, options) {
|
|
|
602
610
|
expiresAt: new Date(Date.now() + (options.expiresIn || 3600) * 1e3).toISOString()
|
|
603
611
|
};
|
|
604
612
|
} catch (error) {
|
|
605
|
-
|
|
613
|
+
log2.error("Failed to create signed URL:", error);
|
|
606
614
|
return null;
|
|
607
615
|
}
|
|
608
616
|
}
|
|
@@ -635,7 +643,7 @@ async function listFiles(supabase, options) {
|
|
|
635
643
|
sortBy: { column: "created_at", order: "desc" }
|
|
636
644
|
});
|
|
637
645
|
if (error) {
|
|
638
|
-
|
|
646
|
+
log2.error("Failed to list files:", error);
|
|
639
647
|
return { files: [], totalCount: 0, hasMore: false };
|
|
640
648
|
}
|
|
641
649
|
const files = (data || []).map((item) => ({
|
|
@@ -660,7 +668,7 @@ async function listFiles(supabase, options) {
|
|
|
660
668
|
hasMore: files.length >= (options.limit || 100)
|
|
661
669
|
};
|
|
662
670
|
} catch (error) {
|
|
663
|
-
|
|
671
|
+
log2.error("Failed to list files:", error);
|
|
664
672
|
return { files: [], totalCount: 0, hasMore: false };
|
|
665
673
|
}
|
|
666
674
|
}
|
|
@@ -669,7 +677,7 @@ async function downloadFile(supabase, path, isPublic = false) {
|
|
|
669
677
|
const bucketName = getBucketName(isPublic);
|
|
670
678
|
const { data, error } = await supabase.storage.from(bucketName).download(path);
|
|
671
679
|
if (error) {
|
|
672
|
-
|
|
680
|
+
log2.error("Failed to download file:", error);
|
|
673
681
|
return null;
|
|
674
682
|
}
|
|
675
683
|
if (!data) {
|
|
@@ -689,7 +697,7 @@ async function downloadFile(supabase, path, isPublic = false) {
|
|
|
689
697
|
}
|
|
690
698
|
};
|
|
691
699
|
} catch (error) {
|
|
692
|
-
|
|
700
|
+
log2.error("Failed to download file:", error);
|
|
693
701
|
return null;
|
|
694
702
|
}
|
|
695
703
|
}
|
|
@@ -720,8 +728,10 @@ async function archiveFile(supabase, path, options) {
|
|
|
720
728
|
// src/hooks/useFileDisplay.ts
|
|
721
729
|
import { useState, useEffect as useEffect2, useCallback } from "react";
|
|
722
730
|
|
|
723
|
-
// src/utils/file-reference.ts
|
|
731
|
+
// src/utils/file-reference/index.ts
|
|
724
732
|
init_organisationContext();
|
|
733
|
+
init_logger();
|
|
734
|
+
var log3 = createLogger("FileReferenceService");
|
|
725
735
|
var FileReferenceServiceImpl = class {
|
|
726
736
|
constructor(supabase) {
|
|
727
737
|
this.supabase = supabase;
|
|
@@ -804,7 +814,7 @@ var FileReferenceServiceImpl = class {
|
|
|
804
814
|
);
|
|
805
815
|
return fileRef;
|
|
806
816
|
} catch (error) {
|
|
807
|
-
|
|
817
|
+
log3.error("Error creating file reference:", error);
|
|
808
818
|
throw error;
|
|
809
819
|
}
|
|
810
820
|
}
|
|
@@ -819,7 +829,7 @@ var FileReferenceServiceImpl = class {
|
|
|
819
829
|
}
|
|
820
830
|
return data;
|
|
821
831
|
} catch (error) {
|
|
822
|
-
|
|
832
|
+
log3.error("Error getting file reference:", error);
|
|
823
833
|
throw error;
|
|
824
834
|
}
|
|
825
835
|
}
|
|
@@ -843,7 +853,7 @@ var FileReferenceServiceImpl = class {
|
|
|
843
853
|
return await this.getSignedUrl(table_name, record_id, organisation_id);
|
|
844
854
|
}
|
|
845
855
|
} catch (error) {
|
|
846
|
-
|
|
856
|
+
log3.error("Error getting file URL:", error);
|
|
847
857
|
throw error;
|
|
848
858
|
}
|
|
849
859
|
}
|
|
@@ -868,7 +878,7 @@ var FileReferenceServiceImpl = class {
|
|
|
868
878
|
});
|
|
869
879
|
return signedUrlResult?.url || null;
|
|
870
880
|
} catch (error) {
|
|
871
|
-
|
|
881
|
+
log3.error("Error getting signed URL:", error);
|
|
872
882
|
throw error;
|
|
873
883
|
}
|
|
874
884
|
}
|
|
@@ -880,7 +890,7 @@ var FileReferenceServiceImpl = class {
|
|
|
880
890
|
}
|
|
881
891
|
return data;
|
|
882
892
|
} catch (error) {
|
|
883
|
-
|
|
893
|
+
log3.error("Error updating file reference:", error);
|
|
884
894
|
throw error;
|
|
885
895
|
}
|
|
886
896
|
}
|
|
@@ -901,7 +911,7 @@ var FileReferenceServiceImpl = class {
|
|
|
901
911
|
}
|
|
902
912
|
return true;
|
|
903
913
|
} catch (error) {
|
|
904
|
-
|
|
914
|
+
log3.error("Error deleting file reference:", error);
|
|
905
915
|
throw error;
|
|
906
916
|
}
|
|
907
917
|
}
|
|
@@ -925,7 +935,7 @@ var FileReferenceServiceImpl = class {
|
|
|
925
935
|
}
|
|
926
936
|
return fullData || [];
|
|
927
937
|
} catch (error) {
|
|
928
|
-
|
|
938
|
+
log3.error("Error listing file references:", error);
|
|
929
939
|
throw error;
|
|
930
940
|
}
|
|
931
941
|
}
|
|
@@ -941,7 +951,7 @@ var FileReferenceServiceImpl = class {
|
|
|
941
951
|
}
|
|
942
952
|
return data || 0;
|
|
943
953
|
} catch (error) {
|
|
944
|
-
|
|
954
|
+
log3.error("Error getting file count:", error);
|
|
945
955
|
throw error;
|
|
946
956
|
}
|
|
947
957
|
}
|
|
@@ -959,18 +969,12 @@ var FileReferenceServiceImpl = class {
|
|
|
959
969
|
}
|
|
960
970
|
return data[0];
|
|
961
971
|
} catch (error) {
|
|
962
|
-
|
|
972
|
+
log3.error("Error getting file reference by ID:", error);
|
|
963
973
|
throw error;
|
|
964
974
|
}
|
|
965
975
|
}
|
|
966
976
|
async getFilesByCategory(table_name, record_id, category, organisation_id) {
|
|
967
977
|
try {
|
|
968
|
-
console.log("[FileReferenceService.getFilesByCategory] Calling RPC function:", {
|
|
969
|
-
table_name,
|
|
970
|
-
record_id,
|
|
971
|
-
category,
|
|
972
|
-
organisation_id
|
|
973
|
-
});
|
|
974
978
|
const { data, error } = await this.supabase.rpc("data_file_reference_by_category_list", {
|
|
975
979
|
p_table_name: table_name,
|
|
976
980
|
p_record_id: record_id,
|
|
@@ -978,7 +982,7 @@ var FileReferenceServiceImpl = class {
|
|
|
978
982
|
p_organisation_id: organisation_id
|
|
979
983
|
});
|
|
980
984
|
if (error) {
|
|
981
|
-
|
|
985
|
+
log3.error("RPC ERROR getting files by category:", {
|
|
982
986
|
error,
|
|
983
987
|
errorCode: error.code,
|
|
984
988
|
errorMessage: error.message,
|
|
@@ -991,21 +995,14 @@ var FileReferenceServiceImpl = class {
|
|
|
991
995
|
});
|
|
992
996
|
throw new Error(`Failed to get files by category: ${error.message}. Category filtering uses file_metadata JSONB field, not a direct column. RPC function required.`);
|
|
993
997
|
}
|
|
994
|
-
console.log("[FileReferenceService.getFilesByCategory] RPC response received:", {
|
|
995
|
-
dataLength: data?.length || 0,
|
|
996
|
-
data: data ? data.slice(0, 2) : null,
|
|
997
|
-
// Log first 2 items for debugging
|
|
998
|
-
fullDataAvailable: data?.every((item) => item.id && item.file_path && item.file_metadata)
|
|
999
|
-
});
|
|
1000
998
|
if (!data || data.length === 0) {
|
|
1001
|
-
console.log("[FileReferenceService.getFilesByCategory] No data from RPC, returning empty array");
|
|
1002
999
|
return [];
|
|
1003
1000
|
}
|
|
1004
1001
|
const fileReferences = data.filter((item) => {
|
|
1005
1002
|
const fileCategory = item.file_metadata?.category;
|
|
1006
1003
|
const matches = fileCategory === category;
|
|
1007
1004
|
if (!matches) {
|
|
1008
|
-
|
|
1005
|
+
log3.warn("File category mismatch in RPC response:", {
|
|
1009
1006
|
fileId: item.id,
|
|
1010
1007
|
expectedCategory: category,
|
|
1011
1008
|
actualCategory: fileCategory
|
|
@@ -1029,16 +1026,9 @@ var FileReferenceServiceImpl = class {
|
|
|
1029
1026
|
};
|
|
1030
1027
|
return fileRef;
|
|
1031
1028
|
});
|
|
1032
|
-
console.log("[FileReferenceService.getFilesByCategory] Constructed file references from RPC response:", {
|
|
1033
|
-
count: fileReferences.length,
|
|
1034
|
-
firstFileId: fileReferences[0]?.id,
|
|
1035
|
-
firstFilePath: fileReferences[0]?.file_path,
|
|
1036
|
-
firstFileIsPublic: fileReferences[0]?.is_public,
|
|
1037
|
-
firstFileHasAllRequiredFields: !!(fileReferences[0]?.id && fileReferences[0]?.file_path && fileReferences[0]?.file_metadata && fileReferences[0]?.table_name && fileReferences[0]?.record_id && fileReferences[0]?.organisation_id)
|
|
1038
|
-
});
|
|
1039
1029
|
return fileReferences;
|
|
1040
1030
|
} catch (error) {
|
|
1041
|
-
|
|
1031
|
+
log3.error("Error getting files by category:", error);
|
|
1042
1032
|
throw error;
|
|
1043
1033
|
}
|
|
1044
1034
|
}
|
|
@@ -1092,6 +1082,7 @@ async function uploadFileWithReference(supabase, options, file) {
|
|
|
1092
1082
|
}
|
|
1093
1083
|
|
|
1094
1084
|
// src/hooks/useFileDisplay.ts
|
|
1085
|
+
init_logger();
|
|
1095
1086
|
var authenticatedFileCache = /* @__PURE__ */ new Map();
|
|
1096
1087
|
var MAX_CACHE_SIZE = 100;
|
|
1097
1088
|
function cleanupCache() {
|
|
@@ -1136,7 +1127,7 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
|
|
|
1136
1127
|
}
|
|
1137
1128
|
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
1138
1129
|
if (!uuidRegex.test(organisation_id)) {
|
|
1139
|
-
|
|
1130
|
+
logger.warn("useFileDisplay", "Invalid organisationId format (not a valid UUID):", organisation_id);
|
|
1140
1131
|
}
|
|
1141
1132
|
const cacheKey = `file_${table_name}_${record_id}_${organisation_id}_${category || "all"}`;
|
|
1142
1133
|
if (enableCache) {
|
|
@@ -1160,7 +1151,7 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
|
|
|
1160
1151
|
setError(null);
|
|
1161
1152
|
return;
|
|
1162
1153
|
} catch (err) {
|
|
1163
|
-
|
|
1154
|
+
logger.warn("useFileDisplay", "Failed to regenerate signed URL from cache, falling back to fetch:", err);
|
|
1164
1155
|
}
|
|
1165
1156
|
}
|
|
1166
1157
|
setFileUrl(cachedData.fileUrl || null);
|
|
@@ -1179,7 +1170,7 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
|
|
|
1179
1170
|
const service = createFileReferenceService(supabase);
|
|
1180
1171
|
let files = [];
|
|
1181
1172
|
if (category) {
|
|
1182
|
-
|
|
1173
|
+
logger.debug("useFileDisplay", "Using RPC function for category filtering:", {
|
|
1183
1174
|
table_name,
|
|
1184
1175
|
record_id,
|
|
1185
1176
|
category,
|
|
@@ -1218,7 +1209,7 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
|
|
|
1218
1209
|
setFileCount(files.length);
|
|
1219
1210
|
if (category && files.length > 0) {
|
|
1220
1211
|
const firstFile = files[0];
|
|
1221
|
-
|
|
1212
|
+
logger.debug("useFileDisplay", "Processing category files, first file:", {
|
|
1222
1213
|
id: firstFile.id,
|
|
1223
1214
|
file_path: firstFile.file_path,
|
|
1224
1215
|
is_public: firstFile.is_public,
|
|
@@ -1229,7 +1220,7 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
|
|
|
1229
1220
|
let url = null;
|
|
1230
1221
|
if (firstFile.is_public) {
|
|
1231
1222
|
url = getPublicUrl(supabase, firstFile.file_path, true);
|
|
1232
|
-
|
|
1223
|
+
logger.debug("useFileDisplay", "Generated public URL:", url);
|
|
1233
1224
|
} else {
|
|
1234
1225
|
const signedUrlResult = await getSignedUrl(supabase, firstFile.file_path, {
|
|
1235
1226
|
appName: "pace-core",
|
|
@@ -1237,9 +1228,9 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
|
|
|
1237
1228
|
expiresIn: 3600
|
|
1238
1229
|
});
|
|
1239
1230
|
url = signedUrlResult?.url || null;
|
|
1240
|
-
|
|
1231
|
+
logger.debug("useFileDisplay", "Generated signed URL:", url ? "URL generated" : "URL generation failed");
|
|
1241
1232
|
}
|
|
1242
|
-
|
|
1233
|
+
logger.debug("useFileDisplay", "Setting file URL:", url ? "URL set" : "URL is null");
|
|
1243
1234
|
setFileUrl(url);
|
|
1244
1235
|
} else {
|
|
1245
1236
|
const urlMap = /* @__PURE__ */ new Map();
|
|
@@ -1297,7 +1288,7 @@ function useFileDisplay(table_name, record_id, organisation_id, category, option
|
|
|
1297
1288
|
cleanupCache();
|
|
1298
1289
|
}
|
|
1299
1290
|
} catch (err) {
|
|
1300
|
-
|
|
1291
|
+
logger.error("useFileDisplay", "Error fetching files:", err);
|
|
1301
1292
|
const error2 = err instanceof Error ? err : new Error("Unknown error occurred");
|
|
1302
1293
|
setError(error2);
|
|
1303
1294
|
setFileUrl(null);
|
|
@@ -1366,6 +1357,7 @@ function invalidateFileDisplayCache(table_name, record_id, organisation_id, cate
|
|
|
1366
1357
|
|
|
1367
1358
|
// src/hooks/public/usePublicFileDisplay.ts
|
|
1368
1359
|
import { useState as useState2, useEffect as useEffect3, useCallback as useCallback2 } from "react";
|
|
1360
|
+
init_logger();
|
|
1369
1361
|
var publicFileCache = /* @__PURE__ */ new Map();
|
|
1370
1362
|
function usePublicFileDisplay(table_name, record_id, organisation_id, category, options) {
|
|
1371
1363
|
const {
|
|
@@ -1393,7 +1385,7 @@ function usePublicFileDisplay(table_name, record_id, organisation_id, category,
|
|
|
1393
1385
|
}
|
|
1394
1386
|
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
1395
1387
|
if (!uuidRegex.test(organisation_id)) {
|
|
1396
|
-
|
|
1388
|
+
logger.warn("usePublicFileDisplay", "Invalid organisationId format (not a valid UUID)", { organisation_id });
|
|
1397
1389
|
}
|
|
1398
1390
|
const cacheKey = `public_file_${table_name}_${record_id}_${organisation_id}_${category || "all"}`;
|
|
1399
1391
|
if (enableCache) {
|
|
@@ -1421,46 +1413,9 @@ function usePublicFileDisplay(table_name, record_id, organisation_id, category,
|
|
|
1421
1413
|
p_category: category,
|
|
1422
1414
|
p_organisation_id: organisation_id
|
|
1423
1415
|
};
|
|
1424
|
-
console.log("[usePublicFileDisplay] RPC Call Parameters:", {
|
|
1425
|
-
function: "data_file_reference_by_category_list",
|
|
1426
|
-
parameters: rpcParams,
|
|
1427
|
-
supabaseClient: {
|
|
1428
|
-
available: !!supabase,
|
|
1429
|
-
hasAuth: !!supabase?.auth
|
|
1430
|
-
},
|
|
1431
|
-
context: "public_page_anonymous_user",
|
|
1432
|
-
note: "Public pages use anonymous Supabase client (no user session)"
|
|
1433
|
-
});
|
|
1434
|
-
console.log("[usePublicFileDisplay] Using RPC function for category filtering:", {
|
|
1435
|
-
table_name,
|
|
1436
|
-
record_id,
|
|
1437
|
-
category,
|
|
1438
|
-
organisation_id
|
|
1439
|
-
});
|
|
1440
1416
|
const { data, error: rpcError } = await supabase.rpc("data_file_reference_by_category_list", rpcParams);
|
|
1441
|
-
console.log("[usePublicFileDisplay] RPC Response:", {
|
|
1442
|
-
function: "data_file_reference_by_category_list",
|
|
1443
|
-
dataType: Array.isArray(data) ? "array" : typeof data,
|
|
1444
|
-
dataLength: Array.isArray(data) ? data.length : data ? 1 : 0,
|
|
1445
|
-
dataIsNull: data === null,
|
|
1446
|
-
dataIsUndefined: data === void 0,
|
|
1447
|
-
dataIsEmpty: Array.isArray(data) ? data.length === 0 : !data,
|
|
1448
|
-
firstItem: Array.isArray(data) && data.length > 0 ? {
|
|
1449
|
-
id: data[0].id,
|
|
1450
|
-
file_path: data[0].file_path,
|
|
1451
|
-
is_public: data[0].is_public,
|
|
1452
|
-
has_metadata: !!data[0].file_metadata,
|
|
1453
|
-
category_in_metadata: data[0].file_metadata?.category
|
|
1454
|
-
} : null,
|
|
1455
|
-
error: rpcError ? {
|
|
1456
|
-
message: rpcError.message,
|
|
1457
|
-
code: rpcError.code,
|
|
1458
|
-
details: rpcError.details,
|
|
1459
|
-
hint: rpcError.hint
|
|
1460
|
-
} : null
|
|
1461
|
-
});
|
|
1462
1417
|
if (rpcError) {
|
|
1463
|
-
|
|
1418
|
+
logger.error("usePublicFileDisplay", "RPC function error", {
|
|
1464
1419
|
function: "data_file_reference_by_category_list",
|
|
1465
1420
|
table_name,
|
|
1466
1421
|
record_id,
|
|
@@ -1476,25 +1431,6 @@ function usePublicFileDisplay(table_name, record_id, organisation_id, category,
|
|
|
1476
1431
|
if (!data || data.length === 0) {
|
|
1477
1432
|
files = [];
|
|
1478
1433
|
} else {
|
|
1479
|
-
const totalFilesFromRPC = data.length;
|
|
1480
|
-
const filesWithIsPublic = data.filter((item) => item.is_public === true).length;
|
|
1481
|
-
const filesWithIsPublicFalse = data.filter((item) => item.is_public === false).length;
|
|
1482
|
-
const filesWithIsPublicNull = data.filter((item) => item.is_public === null || item.is_public === void 0).length;
|
|
1483
|
-
const filesWithValidStructure = data.filter((item) => item.id && item.file_path && item.file_metadata).length;
|
|
1484
|
-
console.log("[usePublicFileDisplay] RPC Data Analysis (before filtering):", {
|
|
1485
|
-
totalFilesFromRPC,
|
|
1486
|
-
filesWithIsPublicTrue: filesWithIsPublic,
|
|
1487
|
-
filesWithIsPublicFalse,
|
|
1488
|
-
filesWithIsPublicNull,
|
|
1489
|
-
filesWithValidStructure,
|
|
1490
|
-
sampleItems: data.slice(0, 2).map((item) => ({
|
|
1491
|
-
id: item.id,
|
|
1492
|
-
is_public: item.is_public,
|
|
1493
|
-
has_id: !!item.id,
|
|
1494
|
-
has_file_path: !!item.file_path,
|
|
1495
|
-
has_metadata: !!item.file_metadata
|
|
1496
|
-
}))
|
|
1497
|
-
});
|
|
1498
1434
|
files = data.filter((item) => {
|
|
1499
1435
|
return item.is_public === true && item.id && item.file_path && item.file_metadata;
|
|
1500
1436
|
}).map((item) => {
|
|
@@ -1512,16 +1448,6 @@ function usePublicFileDisplay(table_name, record_id, organisation_id, category,
|
|
|
1512
1448
|
updated_at: item.created_at || (/* @__PURE__ */ new Date()).toISOString()
|
|
1513
1449
|
};
|
|
1514
1450
|
});
|
|
1515
|
-
console.log("[usePublicFileDisplay] Data Transformation (after filtering):", {
|
|
1516
|
-
filesBeforeFilter: totalFilesFromRPC,
|
|
1517
|
-
filesAfterFilter: files.length,
|
|
1518
|
-
constructedFileReferences: files.map((f) => ({
|
|
1519
|
-
id: f.id,
|
|
1520
|
-
file_path: f.file_path,
|
|
1521
|
-
organisation_id: f.organisation_id,
|
|
1522
|
-
is_public: f.is_public
|
|
1523
|
-
}))
|
|
1524
|
-
});
|
|
1525
1451
|
}
|
|
1526
1452
|
} else {
|
|
1527
1453
|
const { data: fileIds, error: rpcError } = await supabase.rpc("data_file_reference_list", {
|
|
@@ -1530,7 +1456,7 @@ function usePublicFileDisplay(table_name, record_id, organisation_id, category,
|
|
|
1530
1456
|
p_organisation_id: organisation_id
|
|
1531
1457
|
});
|
|
1532
1458
|
if (rpcError) {
|
|
1533
|
-
|
|
1459
|
+
logger.error("usePublicFileDisplay", "RPC function error", {
|
|
1534
1460
|
function: "data_file_reference_list",
|
|
1535
1461
|
table_name,
|
|
1536
1462
|
record_id,
|
|
@@ -1555,56 +1481,6 @@ function usePublicFileDisplay(table_name, record_id, organisation_id, category,
|
|
|
1555
1481
|
}
|
|
1556
1482
|
const publicFiles = files.filter((f) => f.is_public === true);
|
|
1557
1483
|
if (publicFiles.length === 0) {
|
|
1558
|
-
console.log("[usePublicFileDisplay] No public files found:", {
|
|
1559
|
-
table_name,
|
|
1560
|
-
record_id,
|
|
1561
|
-
category,
|
|
1562
|
-
organisation_id,
|
|
1563
|
-
totalFilesFound: files.length,
|
|
1564
|
-
note: "This is expected if no public files exist. Fallback UI will be shown if showFallback is enabled."
|
|
1565
|
-
});
|
|
1566
|
-
try {
|
|
1567
|
-
console.log("[usePublicFileDisplay] Database Query Verification (debugging):", {
|
|
1568
|
-
note: "Performing direct query to verify if files exist in database",
|
|
1569
|
-
table_name,
|
|
1570
|
-
record_id,
|
|
1571
|
-
organisation_id,
|
|
1572
|
-
category
|
|
1573
|
-
});
|
|
1574
|
-
const { data: directQueryData, error: directQueryError } = await supabase.from("file_references").select("id, file_path, file_metadata, is_public, organisation_id").eq("table_name", table_name).eq("record_id", record_id).eq("organisation_id", organisation_id);
|
|
1575
|
-
if (directQueryError) {
|
|
1576
|
-
console.warn("[usePublicFileDisplay] Direct query error (RLS may be blocking):", {
|
|
1577
|
-
error: directQueryError.message,
|
|
1578
|
-
code: directQueryError.code,
|
|
1579
|
-
hint: "This is expected if RLS policies block anonymous access to file_references table"
|
|
1580
|
-
});
|
|
1581
|
-
} else {
|
|
1582
|
-
const totalFilesInDB = directQueryData?.length || 0;
|
|
1583
|
-
const publicFilesInDB = directQueryData?.filter((f) => f.is_public === true).length || 0;
|
|
1584
|
-
const privateFilesInDB = directQueryData?.filter((f) => f.is_public === false).length || 0;
|
|
1585
|
-
const filesWithCategory = category ? directQueryData?.filter(
|
|
1586
|
-
(f) => f.file_metadata?.category === category
|
|
1587
|
-
).length || 0 : totalFilesInDB;
|
|
1588
|
-
console.log("[usePublicFileDisplay] Database Query Results:", {
|
|
1589
|
-
totalFilesInDB,
|
|
1590
|
-
publicFilesInDB,
|
|
1591
|
-
privateFilesInDB,
|
|
1592
|
-
filesWithCategory: category ? filesWithCategory : "N/A (no category filter)",
|
|
1593
|
-
filesWithMatchingCategoryAndPublic: category ? directQueryData?.filter(
|
|
1594
|
-
(f) => f.is_public === true && f.file_metadata?.category === category
|
|
1595
|
-
).length || 0 : "N/A",
|
|
1596
|
-
sampleFiles: directQueryData?.slice(0, 2).map((f) => ({
|
|
1597
|
-
id: f.id,
|
|
1598
|
-
is_public: f.is_public,
|
|
1599
|
-
category: f.file_metadata?.category,
|
|
1600
|
-
organisation_id: f.organisation_id
|
|
1601
|
-
})) || [],
|
|
1602
|
-
conclusion: totalFilesInDB === 0 ? "No files exist in database for this record" : publicFilesInDB === 0 ? "Files exist but none are marked as public (is_public = true)" : filesWithCategory === 0 && category ? `Files exist but none match category "${category}"` : "Files exist and should be accessible - RPC function may be filtering them out"
|
|
1603
|
-
});
|
|
1604
|
-
}
|
|
1605
|
-
} catch (debugError) {
|
|
1606
|
-
console.warn("[usePublicFileDisplay] Database verification query failed:", debugError);
|
|
1607
|
-
}
|
|
1608
1484
|
setFileUrl(null);
|
|
1609
1485
|
setFileReference(null);
|
|
1610
1486
|
setFileReferences([]);
|
|
@@ -1673,7 +1549,7 @@ function usePublicFileDisplay(table_name, record_id, organisation_id, category,
|
|
|
1673
1549
|
});
|
|
1674
1550
|
}
|
|
1675
1551
|
} catch (err) {
|
|
1676
|
-
|
|
1552
|
+
logger.error("usePublicFileDisplay", "Error fetching files", {
|
|
1677
1553
|
table_name,
|
|
1678
1554
|
record_id,
|
|
1679
1555
|
organisation_id,
|
|
@@ -1778,4 +1654,4 @@ export {
|
|
|
1778
1654
|
clearPublicFileDisplayCache,
|
|
1779
1655
|
getPublicFileDisplayCacheStats
|
|
1780
1656
|
};
|
|
1781
|
-
//# sourceMappingURL=chunk-
|
|
1657
|
+
//# sourceMappingURL=chunk-TVYPTYOY.js.map
|