@jmruthers/pace-core 0.5.135 → 0.5.137
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-A36PJG6N.js → DataTable-6M4L6BI2.js} +26 -13
- package/dist/{DataTable-C7GaRZye.d.ts → DataTable-CWAZZcXC.d.ts} +1 -1
- package/dist/{PublicLoadingSpinner-CUAnTvcg.d.ts → EventLogo-rFL_kRjk.d.ts} +123 -135
- package/dist/{UnifiedAuthProvider-BVKmQd9u.d.ts → UnifiedAuthProvider-DJxGTftH.d.ts} +1 -1
- package/dist/{UnifiedAuthProvider-CQDZRJIS.js → UnifiedAuthProvider-XIQQ7LVU.js} +5 -5
- package/dist/{api-TNIBJWLM.js → api-45XYYO2A.js} +4 -3
- package/dist/{audit-T36HM7IM.js → audit-64X3VJXB.js} +3 -2
- package/dist/{chunk-F64FFPOZ.js → chunk-22WKWKRX.js} +26 -20
- package/dist/chunk-22WKWKRX.js.map +1 -0
- package/dist/{chunk-VZ5OR6HD.js → chunk-4C7EXCAR.js} +62 -150
- package/dist/chunk-4C7EXCAR.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-CTJRBUX2.js → chunk-6LAAY47Q.js} +2 -2
- package/dist/{chunk-UJI6WSMD.js → chunk-7QCC6MCP.js} +90 -3
- package/dist/chunk-7QCC6MCP.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-CQZU6TFE.js → chunk-BCIBECNB.js} +100 -62
- package/dist/chunk-BCIBECNB.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-BJPBT3CU.js +21 -0
- package/dist/chunk-BJPBT3CU.js.map +1 -0
- package/dist/{chunk-BYXRHAIF.js → chunk-BLCXZEYF.js} +23 -14
- package/dist/chunk-BLCXZEYF.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-O3NWNXDY.js → chunk-FMUCXFII.js} +2 -2
- package/dist/chunk-FMUCXFII.js.map +1 -0
- package/dist/{chunk-GVDR7WNV.js → chunk-HAWZXGR2.js} +334 -614
- package/dist/chunk-HAWZXGR2.js.map +1 -0
- package/dist/{chunk-ZV77RZMU.js → chunk-INQLMHPF.js} +2 -2
- package/dist/chunk-JISYG63F.js +70 -0
- package/dist/chunk-JISYG63F.js.map +1 -0
- package/dist/{chunk-HMNOSGVA.js → chunk-KYRHUBIU.js} +576 -767
- package/dist/chunk-KYRHUBIU.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-TGIY2AR2.js → chunk-MA6EPSGZ.js} +4 -3
- package/dist/{chunk-TGIY2AR2.js.map → chunk-MA6EPSGZ.js.map} +1 -1
- package/dist/chunk-OWAG3GSU.js +58 -0
- package/dist/chunk-OWAG3GSU.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-ZYZCRSBD.js → chunk-T6JN6LH6.js} +16 -11
- package/dist/chunk-T6JN6LH6.js.map +1 -0
- package/dist/chunk-XDNLUEXI.js +138 -0
- package/dist/chunk-XDNLUEXI.js.map +1 -0
- package/dist/{chunk-3CG5L6RN.js → chunk-YCWDTTUK.js} +90 -75
- package/dist/chunk-YCWDTTUK.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 +27 -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 +21 -16
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +101 -9
- package/dist/index.js +44 -31
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +1 -1
- package/dist/providers.js +4 -4
- package/dist/rbac/index.js +12 -12
- package/dist/schema-DTDZQe2u.d.ts +28 -0
- 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 +153 -4
- package/dist/types.js +51 -16
- package/dist/types.js.map +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 +221 -173
- package/dist/utils.js +185 -225
- package/dist/utils.js.map +1 -1
- package/dist/validation.d.ts +24 -115
- package/dist/validation.js +19 -474
- 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/BadgeProps.md +27 -0
- 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 +1 -1
- 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 +1 -1
- package/docs/api/interfaces/ExportOptions.md +8 -8
- 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 +591 -220
- package/docs/api-reference/components.md +106 -26
- package/docs/architecture/README.md +0 -3
- 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/docs/styles/README.md +0 -2
- package/examples/README.md +30 -14
- package/examples/STRUCTURE.md +125 -0
- package/examples/components 2/DataTable/HierarchicalActionsExample.tsx +421 -0
- package/examples/components 2/DataTable/HierarchicalExample.tsx +475 -0
- package/examples/components 2/DataTable/InitialPageSizeExample.tsx +177 -0
- package/examples/components 2/DataTable/PerformanceExample.tsx +506 -0
- package/examples/components 2/DataTable/index.ts +13 -0
- package/examples/components 2/Dialog/BasicHtmlTest.tsx +55 -0
- package/examples/components 2/Dialog/DebugHtmlExample.tsx +68 -0
- package/examples/components 2/Dialog/HtmlDialogExample.tsx +202 -0
- package/examples/components 2/Dialog/ScrollableDialogExample.tsx +290 -0
- package/examples/components 2/Dialog/SimpleHtmlTest.tsx +61 -0
- package/examples/components 2/Dialog/SmartDialogExample.tsx +322 -0
- package/examples/components 2/Dialog/index.ts +15 -0
- package/examples/components 2/index.ts +11 -0
- package/examples/features/index.ts +12 -0
- package/{src/examples → examples/features/public-pages}/CorrectPublicPageImplementation.tsx +14 -17
- package/{src/examples → examples/features/public-pages}/PublicEventPage.tsx +14 -27
- package/{src/examples → examples/features/public-pages}/PublicPageApp.tsx +15 -28
- package/{src/examples → examples/features/public-pages}/PublicPageUsageExample.tsx +8 -10
- package/examples/features/public-pages/index.ts +14 -0
- package/examples/features/rbac/CompleteRBACExample.tsx +324 -0
- package/examples/features/rbac/EventBasedApp.tsx +239 -0
- package/examples/features/rbac/PermissionExample.tsx +151 -0
- package/examples/features/rbac/index.ts +13 -0
- package/examples/index.ts +11 -3
- package/package.json +30 -19
- package/src/__tests__/TEST_STANDARD.md +92 -0
- package/src/components/Alert/Alert.tsx +1 -1
- package/src/components/Avatar/Avatar.tsx +1 -1
- package/src/components/Badge/Badge.test.tsx +314 -0
- package/src/components/Badge/Badge.tsx +304 -0
- package/src/components/Badge/index.ts +3 -0
- 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__/DataTableCore.test-setup.ts +217 -0
- package/src/components/DataTable/__tests__/styles.test.ts +3 -3
- package/src/components/DataTable/components/ActionButtons.tsx +0 -15
- package/src/components/DataTable/components/ColumnFilter.tsx +8 -4
- package/src/components/DataTable/components/DataTableBody.tsx +461 -0
- 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/DraggableColumnHeader.tsx +144 -0
- package/src/components/DataTable/components/EditableRow.tsx +1 -1
- package/src/components/DataTable/components/FilterRow.tsx +9 -3
- package/src/components/DataTable/components/ImportModal.tsx +2 -14
- package/src/components/DataTable/components/PaginationControls.tsx +2 -1
- package/src/components/DataTable/components/UnifiedTableBody.tsx +109 -82
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +513 -0
- package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +14 -68
- package/src/components/DataTable/components/__tests__/ActionButtons.test.tsx +1 -1
- package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +62 -0
- 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__/FilterRow.test.tsx +43 -0
- package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +1 -1
- package/src/components/DataTable/core/ActionManager.ts +235 -0
- package/src/components/DataTable/core/ColumnManager.ts +205 -0
- package/src/components/DataTable/core/DataManager.ts +188 -0
- package/src/components/DataTable/core/DataTableContext.tsx +181 -0
- package/src/components/DataTable/core/LocalDataAdapter.ts +273 -0
- package/src/components/DataTable/core/PluginRegistry.ts +229 -0
- package/src/components/DataTable/core/StateManager.ts +311 -0
- package/src/components/DataTable/core/interfaces.ts +338 -0
- 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 +28 -7
- package/src/components/DataTable/types.ts +13 -0
- package/src/components/DataTable/utils/__tests__/columnUtils.test.ts +94 -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/columnUtils.ts +40 -0
- package/src/components/DataTable/utils/debugTools.ts +609 -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 +2 -0
- package/src/components/DataTable/utils/paginationUtils.ts +1 -1
- package/src/components/Dialog/Dialog.tsx +2 -2
- package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +8 -1
- 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.test.tsx +1 -1
- package/src/components/Footer/Footer.tsx +1 -1
- package/src/components/Form/Form.test.tsx +5 -510
- 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.test.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.performance.test.tsx +76 -10
- 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 +14 -13
- 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/__tests__/PublicPageFooter.test.tsx +1 -1
- package/src/components/PublicLayout/index.ts +4 -2
- package/src/components/Select/Select.test.tsx +1 -1
- package/src/components/Select/Select.tsx +21 -9
- 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/Table/__tests__/Table.test.tsx +1 -1
- package/src/components/Toast/Toast.tsx +1 -1
- package/src/components/Tooltip/Tooltip.tsx +1 -1
- package/src/components/index.ts +7 -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__/useFileUrl.unit.test.ts +83 -85
- 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 +20 -7
- 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/styles/core.css +3 -0
- 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/app/appConfig.ts +47 -0
- package/src/utils/app/appIdResolver.test.ts +497 -0
- package/src/utils/app/appIdResolver.ts +133 -0
- package/src/utils/app/appNameResolver.simple.test.ts +212 -0
- package/src/utils/app/appNameResolver.test.ts +121 -0
- package/src/utils/app/appNameResolver.ts +195 -0
- package/src/utils/audit/audit.ts +127 -0
- package/src/utils/context/organisationContext.test.ts +322 -0
- package/src/utils/context/organisationContext.ts +156 -0
- package/src/utils/context/sessionTracking.ts +125 -0
- package/src/utils/core/cn.ts +7 -0
- package/src/utils/core/debugLogger.ts +67 -0
- package/src/utils/core/logger.ts +181 -0
- package/src/utils/device/deviceFingerprint.ts +215 -0
- package/src/utils/dynamic/dynamicUtils.ts +105 -0
- package/src/utils/dynamic/lazyLoad.tsx +44 -0
- package/src/utils/file-reference/__tests__/file-reference.test.ts +788 -0
- package/src/utils/file-reference/index.ts +501 -0
- package/src/utils/formatting/formatDate.test.ts +237 -0
- package/src/utils/formatting/formatting.ts +133 -0
- package/src/utils/index.ts +39 -54
- package/src/utils/performance/bundleAnalysis.ts +129 -0
- package/src/utils/performance/performanceBenchmark.ts +64 -0
- package/src/utils/performance/performanceBudgets.ts +110 -0
- package/src/utils/permissions/permissionTypes.ts +37 -0
- package/src/utils/permissions/permissionUtils.test.ts +393 -0
- package/src/utils/permissions/permissionUtils.ts +34 -0
- package/src/utils/security/auth-utils.ts +96 -0
- package/src/utils/security/secureDataAccess.test.ts +711 -0
- package/src/utils/security/secureDataAccess.ts +377 -0
- package/src/utils/security/secureErrors.ts +82 -0
- package/src/utils/security/secureStorage.ts +244 -0
- package/src/utils/security/security.ts +159 -0
- package/src/utils/security/securityMonitor.ts +45 -0
- package/src/utils/storage/__tests__/helpers.unit.test.ts +1 -4
- package/src/utils/storage/helpers.ts +15 -8
- package/src/utils/validation/__tests__/htmlSanitization.unit.test.ts +598 -0
- package/src/{validation → utils/validation}/csrf.ts +1 -1
- package/src/utils/validation/htmlSanitization.ts +184 -0
- package/src/utils/validation/index.ts +79 -0
- package/src/utils/validation/sanitization.ts +333 -0
- package/src/{validation/schemaUtils.ts → utils/validation/schema.ts} +11 -6
- package/src/{validation → utils/validation}/sqlInjectionProtection.ts +2 -0
- package/src/utils/validation/validation.ts +111 -0
- package/src/utils/validation/validationUtils.ts +123 -0
- package/src/validation/index.ts +3 -34
- 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 +0 -87
- 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/dist/validation-DnhrNMju.d.ts +0 -159
- package/src/components/PublicLayout/__tests__/PublicPageDebugger.test.tsx +0 -185
- 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-6M4L6BI2.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-CQDZRJIS.js.map → UnifiedAuthProvider-XIQQ7LVU.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-6LAAY47Q.js.map} +0 -0
- /package/dist/{chunk-ZV77RZMU.js.map → chunk-INQLMHPF.js.map} +0 -0
- /package/dist/{useInactivityTracker-MRUU55XI.js.map → useInactivityTracker-TO6ZOF35.js.map} +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/dist/utils.js
CHANGED
|
@@ -7,45 +7,70 @@ import {
|
|
|
7
7
|
formatPercent,
|
|
8
8
|
getAppConfig,
|
|
9
9
|
getCurrentAppId,
|
|
10
|
-
getCurrentAppName,
|
|
11
10
|
setAppConfig,
|
|
12
11
|
useSessionTracking
|
|
13
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-LS353YLY.js";
|
|
14
13
|
import {
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
CachedAppIdResolver,
|
|
15
|
+
LoadingSpinner,
|
|
16
|
+
cachedAppIdResolver,
|
|
17
|
+
getAppId,
|
|
18
|
+
getAppIds
|
|
19
|
+
} from "./chunk-S5OFRT4M.js";
|
|
20
|
+
import "./chunk-OWAG3GSU.js";
|
|
17
21
|
import {
|
|
18
22
|
getAppNameFromBuildTime,
|
|
19
23
|
getAppNameFromEnvironment,
|
|
20
24
|
getAppNameFromGlobal,
|
|
21
25
|
getAppNameFromPackageJson,
|
|
26
|
+
getCurrentAppName,
|
|
22
27
|
getCurrentAppNameWithFallback,
|
|
23
28
|
setRBACAppName
|
|
24
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-Q5QRDWKI.js";
|
|
30
|
+
import {
|
|
31
|
+
deepMerge,
|
|
32
|
+
isEmpty,
|
|
33
|
+
isObject,
|
|
34
|
+
isStrongPassword,
|
|
35
|
+
isValidDate,
|
|
36
|
+
isValidEmail,
|
|
37
|
+
isValidUrl,
|
|
38
|
+
isWithinRange,
|
|
39
|
+
matchesPattern
|
|
40
|
+
} from "./chunk-JISYG63F.js";
|
|
25
41
|
import {
|
|
26
42
|
useComponentPerformance
|
|
27
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-ANBQRTPX.js";
|
|
28
44
|
import {
|
|
29
45
|
PERFORMANCE_BUDGETS,
|
|
30
46
|
performanceBudgetMonitor
|
|
31
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-FMUCXFII.js";
|
|
32
48
|
import {
|
|
33
49
|
cn
|
|
34
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-56XJ3TU6.js";
|
|
35
51
|
import {
|
|
36
52
|
clearOrganisationContext,
|
|
37
53
|
getOrganisationContext,
|
|
38
54
|
init_organisationContext,
|
|
55
|
+
init_secureStorage,
|
|
39
56
|
isOrganisationContextAvailable,
|
|
57
|
+
secureStorage,
|
|
40
58
|
setOrganisationContext
|
|
41
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-7QCC6MCP.js";
|
|
42
60
|
import {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
} from "./chunk-
|
|
61
|
+
combineSchemas,
|
|
62
|
+
pickSchema
|
|
63
|
+
} from "./chunk-BJPBT3CU.js";
|
|
64
|
+
import {
|
|
65
|
+
LogLevel,
|
|
66
|
+
Logger,
|
|
67
|
+
createLogger,
|
|
68
|
+
init_logger,
|
|
69
|
+
logger
|
|
70
|
+
} from "./chunk-XDNLUEXI.js";
|
|
46
71
|
import "./chunk-PLDDJCW6.js";
|
|
47
72
|
|
|
48
|
-
// src/utils/debugLogger.ts
|
|
73
|
+
// src/utils/core/debugLogger.ts
|
|
49
74
|
var DebugLogger = class {
|
|
50
75
|
/**
|
|
51
76
|
* Check if we're in development mode
|
|
@@ -95,68 +120,13 @@ var DebugLogger = class {
|
|
|
95
120
|
}
|
|
96
121
|
};
|
|
97
122
|
|
|
98
|
-
// src/utils/
|
|
99
|
-
|
|
100
|
-
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
101
|
-
return emailPattern.test(email);
|
|
102
|
-
}
|
|
103
|
-
function isEmpty(value) {
|
|
104
|
-
return value === null || value === void 0 || value.trim() === "";
|
|
105
|
-
}
|
|
106
|
-
function isStrongPassword(password) {
|
|
107
|
-
const passwordPattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/;
|
|
108
|
-
return passwordPattern.test(password);
|
|
109
|
-
}
|
|
110
|
-
function isValidUrl(url) {
|
|
111
|
-
try {
|
|
112
|
-
new URL(url);
|
|
113
|
-
return true;
|
|
114
|
-
} catch {
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
function isValidDate(dateStr) {
|
|
119
|
-
const date = new Date(dateStr);
|
|
120
|
-
return !isNaN(date.getTime());
|
|
121
|
-
}
|
|
122
|
-
function isWithinRange(value, min, max) {
|
|
123
|
-
return value >= min && value <= max;
|
|
124
|
-
}
|
|
125
|
-
function matchesPattern(value, pattern) {
|
|
126
|
-
return pattern.test(value);
|
|
127
|
-
}
|
|
128
|
-
function deepMerge(target, source) {
|
|
129
|
-
const output = { ...target };
|
|
130
|
-
if (isObject(target) && isObject(source)) {
|
|
131
|
-
Object.keys(source).forEach((key) => {
|
|
132
|
-
if (isObject(source[key])) {
|
|
133
|
-
if (!(key in target)) {
|
|
134
|
-
Object.assign(output, { [key]: source[key] });
|
|
135
|
-
} else {
|
|
136
|
-
const targetKey = key;
|
|
137
|
-
const targetValue = target[targetKey];
|
|
138
|
-
if (isObject(targetValue)) {
|
|
139
|
-
output[targetKey] = deepMerge(
|
|
140
|
-
targetValue,
|
|
141
|
-
source[key]
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
} else {
|
|
146
|
-
Object.assign(output, { [key]: source[key] });
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
return output;
|
|
151
|
-
}
|
|
152
|
-
function isObject(item) {
|
|
153
|
-
return item !== null && typeof item === "object" && !Array.isArray(item);
|
|
154
|
-
}
|
|
123
|
+
// src/utils/index.ts
|
|
124
|
+
init_logger();
|
|
155
125
|
|
|
156
|
-
// src/utils/validationUtils.ts
|
|
126
|
+
// src/utils/validation/validationUtils.ts
|
|
157
127
|
import { z as z2 } from "zod";
|
|
158
128
|
|
|
159
|
-
// src/utils/sanitization.ts
|
|
129
|
+
// src/utils/validation/sanitization.ts
|
|
160
130
|
import { z } from "zod";
|
|
161
131
|
var DEFAULT_OPTIONS = {
|
|
162
132
|
allowHtml: false,
|
|
@@ -198,37 +168,6 @@ function sanitizeEmail(email) {
|
|
|
198
168
|
}
|
|
199
169
|
return email.trim().toLowerCase().replace(/[^\w@.-]/g, "");
|
|
200
170
|
}
|
|
201
|
-
function sanitizePhoneNumber(phone) {
|
|
202
|
-
if (typeof phone !== "string") {
|
|
203
|
-
return "";
|
|
204
|
-
}
|
|
205
|
-
return phone.replace(/[^\d+\-\s()]/g, "").trim();
|
|
206
|
-
}
|
|
207
|
-
function sanitizeUrl(url) {
|
|
208
|
-
if (typeof url !== "string") {
|
|
209
|
-
return "";
|
|
210
|
-
}
|
|
211
|
-
const sanitized = url.trim();
|
|
212
|
-
if (!/^https?:\/\/|^ftp:\/\//i.test(sanitized)) {
|
|
213
|
-
return "";
|
|
214
|
-
}
|
|
215
|
-
if (/javascript:|data:|vbscript:/i.test(sanitized)) {
|
|
216
|
-
return "";
|
|
217
|
-
}
|
|
218
|
-
return sanitized;
|
|
219
|
-
}
|
|
220
|
-
function sanitizeFileName(fileName) {
|
|
221
|
-
if (typeof fileName !== "string") {
|
|
222
|
-
return "";
|
|
223
|
-
}
|
|
224
|
-
return fileName.trim().replace(/[<>:"/\\|?*]/g, "").replace(/\.\./g, "").substring(0, 255);
|
|
225
|
-
}
|
|
226
|
-
function sanitizeSqlInput(input) {
|
|
227
|
-
if (typeof input !== "string") {
|
|
228
|
-
return "";
|
|
229
|
-
}
|
|
230
|
-
return input.replace(/['";\\]/g, "").replace(/--.*$/gm, "").replace(/\/\*.*?\*\//g, "").trim();
|
|
231
|
-
}
|
|
232
171
|
function sanitizeFormData(data, schema, sanitizationRules) {
|
|
233
172
|
try {
|
|
234
173
|
if (sanitizationRules && typeof data === "object" && data !== null) {
|
|
@@ -255,62 +194,34 @@ function sanitizeFormData(data, schema, sanitizationRules) {
|
|
|
255
194
|
};
|
|
256
195
|
}
|
|
257
196
|
}
|
|
258
|
-
var
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
}
|
|
271
|
-
var
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
this.attempts = /* @__PURE__ */ new Map();
|
|
276
|
-
}
|
|
277
|
-
isAllowed(identifier) {
|
|
278
|
-
const now = Date.now();
|
|
279
|
-
const record = this.attempts.get(identifier);
|
|
280
|
-
if (!record || now > record.resetTime) {
|
|
281
|
-
this.attempts.set(identifier, { count: 1, resetTime: now + this.windowMs });
|
|
282
|
-
return true;
|
|
283
|
-
}
|
|
284
|
-
if (record.count >= this.maxAttempts) {
|
|
285
|
-
return false;
|
|
286
|
-
}
|
|
287
|
-
record.count++;
|
|
288
|
-
return true;
|
|
289
|
-
}
|
|
290
|
-
getRemainingAttempts(identifier) {
|
|
291
|
-
const record = this.attempts.get(identifier);
|
|
292
|
-
if (!record || Date.now() > record.resetTime) {
|
|
293
|
-
return this.maxAttempts;
|
|
294
|
-
}
|
|
295
|
-
return Math.max(0, this.maxAttempts - record.count);
|
|
296
|
-
}
|
|
297
|
-
reset(identifier) {
|
|
298
|
-
this.attempts.delete(identifier);
|
|
299
|
-
}
|
|
300
|
-
};
|
|
197
|
+
var secureEmailSchema = z.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long").refine(
|
|
198
|
+
(email) => {
|
|
199
|
+
if (!email || typeof email !== "string") return false;
|
|
200
|
+
const domain = email.split("@")[1];
|
|
201
|
+
return domain && domain.includes(".") && domain.length > 3;
|
|
202
|
+
},
|
|
203
|
+
"Invalid email domain"
|
|
204
|
+
).transform((email) => sanitizeEmail(email));
|
|
205
|
+
var emailSchema = z.string().min(1, "Email is required").email("Invalid email format");
|
|
206
|
+
var nameSchema = z.string().min(1, "Name is required").max(100, "Name too long").regex(/^[a-zA-Z\s'-]+$/, "Name contains invalid characters");
|
|
207
|
+
var phoneSchema = z.string().regex(/^[\+]?[1-9][\d]{0,15}$/, "Invalid phone number format");
|
|
208
|
+
var urlSchema = z.string().url("Invalid URL format");
|
|
209
|
+
var dateSchema = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Invalid date format (YYYY-MM-DD)");
|
|
210
|
+
var secureLoginSchema = z.object({
|
|
211
|
+
email: secureEmailSchema,
|
|
212
|
+
password: z.string().min(1, "Password is required")
|
|
213
|
+
});
|
|
301
214
|
|
|
302
|
-
// src/utils/validationUtils.ts
|
|
215
|
+
// src/utils/validation/validationUtils.ts
|
|
216
|
+
init_logger();
|
|
217
|
+
var log = createLogger("ValidationUtils");
|
|
303
218
|
function validateUserInput(schema, data, sanitizationRules) {
|
|
304
219
|
return sanitizeFormData(data, schema, sanitizationRules);
|
|
305
220
|
}
|
|
306
|
-
|
|
307
|
-
console.warn("sanitizeUserInput is deprecated. Use sanitizeUserInput from lib/sanitization instead.");
|
|
308
|
-
return sanitizeUserInput(input);
|
|
309
|
-
}
|
|
310
|
-
var emailSchema = z2.string().transform((email) => email.toLowerCase().trim()).pipe(z2.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long"));
|
|
221
|
+
var emailSchema2 = z2.string().transform((email) => email.toLowerCase().trim()).pipe(z2.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long"));
|
|
311
222
|
var passwordSchema = z2.string().min(8, "Password must be at least 8 characters").max(128, "Password too long").regex(/[A-Z]/, "Password must contain at least one uppercase letter").regex(/[a-z]/, "Password must contain at least one lowercase letter").regex(/[0-9]/, "Password must contain at least one number").regex(/[^A-Za-z0-9]/, "Password must contain at least one special character");
|
|
312
223
|
var usernameSchema = z2.string().transform((username) => username.toLowerCase().trim()).pipe(z2.string().min(3, "Username must be at least 3 characters").max(30, "Username too long").regex(/^[a-zA-Z0-9_-]+$/, "Username can only contain letters, numbers, hyphens, and underscores"));
|
|
313
|
-
var
|
|
224
|
+
var nameSchema2 = z2.string().min(1, "Name is required").max(100, "Name too long").refine((name) => {
|
|
314
225
|
const dangerousPatterns = [
|
|
315
226
|
/<script/i,
|
|
316
227
|
/<img/i,
|
|
@@ -325,11 +236,11 @@ var nameSchema = z2.string().min(1, "Name is required").max(100, "Name too long"
|
|
|
325
236
|
maxLength: 100,
|
|
326
237
|
trim: true
|
|
327
238
|
}));
|
|
328
|
-
var
|
|
239
|
+
var phoneSchema2 = z2.string().min(10, "Phone number must be at least 10 digits").max(20, "Phone number too long").regex(/^[\+]?[0-9\s\-\(\)\.]+$/, "Invalid phone number format").refine((phone) => {
|
|
329
240
|
const digitsOnly = phone.replace(/\D/g, "");
|
|
330
241
|
return digitsOnly.length >= 10 && digitsOnly.length <= 15;
|
|
331
242
|
}, "Phone number must be between 10 and 15 digits");
|
|
332
|
-
var
|
|
243
|
+
var urlSchema2 = z2.string().min(1, "URL is required").max(2048, "URL too long").refine((url) => {
|
|
333
244
|
try {
|
|
334
245
|
const parsed = new URL(url);
|
|
335
246
|
return ["http:", "https:"].includes(parsed.protocol);
|
|
@@ -347,9 +258,75 @@ var urlSchema = z2.string().min(1, "URL is required").max(2048, "URL too long").
|
|
|
347
258
|
return !dangerousPatterns.some((pattern) => pattern.test(url));
|
|
348
259
|
}, "URL contains invalid protocol");
|
|
349
260
|
|
|
350
|
-
// src/utils/
|
|
261
|
+
// src/utils/validation/common.ts
|
|
262
|
+
import { z as z3 } from "zod";
|
|
263
|
+
var emailSchema3 = z3.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long");
|
|
264
|
+
var nameSchema3 = z3.string().min(1, "Name is required").max(100, "Name too long").regex(/^[a-zA-Z\s'-]+$/, "Name contains invalid characters");
|
|
265
|
+
var phoneSchema3 = z3.string().regex(/^\+?[\d\s\-\(\)]+$/, "Invalid phone number format").min(10, "Phone number too short").max(20, "Phone number too long");
|
|
266
|
+
var urlSchema3 = z3.string().url("Invalid URL format").max(2048, "URL too long");
|
|
267
|
+
var dateSchema2 = z3.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format").refine((date) => {
|
|
268
|
+
const parsed = new Date(date);
|
|
269
|
+
return !isNaN(parsed.getTime());
|
|
270
|
+
}, "Invalid date");
|
|
271
|
+
|
|
272
|
+
// src/utils/validation/passwordSchema.ts
|
|
273
|
+
import { z as z4 } from "zod";
|
|
274
|
+
var COMMON_PASSWORDS = /* @__PURE__ */ new Set([
|
|
275
|
+
"password",
|
|
276
|
+
"123456",
|
|
277
|
+
"123456789",
|
|
278
|
+
"qwerty",
|
|
279
|
+
"abc123",
|
|
280
|
+
"password123",
|
|
281
|
+
"admin",
|
|
282
|
+
"letmein",
|
|
283
|
+
"welcome",
|
|
284
|
+
"monkey",
|
|
285
|
+
"1234567890",
|
|
286
|
+
"password1"
|
|
287
|
+
]);
|
|
288
|
+
var WEAK_PATTERNS = [
|
|
289
|
+
/^(.)\1+$/,
|
|
290
|
+
// All same character
|
|
291
|
+
/^(012|123|234|345|456|567|678|789|890|987|876|765|654|543|432|321|210)+/,
|
|
292
|
+
// Sequential numbers
|
|
293
|
+
/^(abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz)+/i
|
|
294
|
+
// Sequential letters
|
|
295
|
+
];
|
|
296
|
+
var securePasswordSchema = z4.string().min(8, "Password must be at least 8 characters long").max(128, "Password must not exceed 128 characters").refine(
|
|
297
|
+
(password) => /[a-z]/.test(password),
|
|
298
|
+
"Password must contain at least one lowercase letter"
|
|
299
|
+
).refine(
|
|
300
|
+
(password) => /[A-Z]/.test(password),
|
|
301
|
+
"Password must contain at least one uppercase letter"
|
|
302
|
+
).refine(
|
|
303
|
+
(password) => /\d/.test(password),
|
|
304
|
+
"Password must contain at least one number"
|
|
305
|
+
).refine(
|
|
306
|
+
(password) => /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password),
|
|
307
|
+
"Password must contain at least one special character"
|
|
308
|
+
).refine(
|
|
309
|
+
(password) => !COMMON_PASSWORDS.has(password.toLowerCase()),
|
|
310
|
+
"Password is too common. Please choose a stronger password"
|
|
311
|
+
).refine(
|
|
312
|
+
(password) => !WEAK_PATTERNS.some((pattern) => pattern.test(password)),
|
|
313
|
+
"Password contains weak patterns. Please choose a more complex password"
|
|
314
|
+
).refine(
|
|
315
|
+
(password) => {
|
|
316
|
+
const keyboardPatterns = ["qwerty", "asdfgh", "zxcvbn", "1234567890"];
|
|
317
|
+
return !keyboardPatterns.some(
|
|
318
|
+
(pattern) => password.toLowerCase().includes(pattern)
|
|
319
|
+
);
|
|
320
|
+
},
|
|
321
|
+
"Password contains keyboard patterns. Please choose a more secure password"
|
|
322
|
+
);
|
|
323
|
+
var passwordSchema2 = z4.string().min(6, "Password must be at least 6 characters long").max(128, "Password must not exceed 128 characters");
|
|
324
|
+
|
|
325
|
+
// src/utils/security/security.ts
|
|
326
|
+
init_logger();
|
|
327
|
+
var log2 = createLogger("Security");
|
|
351
328
|
function logSecurityEvent(event) {
|
|
352
|
-
|
|
329
|
+
log2.warn("Security event:", {
|
|
353
330
|
...event,
|
|
354
331
|
timestamp: event.timestamp.toISOString()
|
|
355
332
|
});
|
|
@@ -377,6 +354,35 @@ function validateSecurityHeaders(headers) {
|
|
|
377
354
|
return true;
|
|
378
355
|
}
|
|
379
356
|
|
|
357
|
+
// src/utils/security/securityMonitor.ts
|
|
358
|
+
var SecurityMonitor = class {
|
|
359
|
+
constructor() {
|
|
360
|
+
this.events = [];
|
|
361
|
+
}
|
|
362
|
+
logEvent(event) {
|
|
363
|
+
const eventWithId = {
|
|
364
|
+
...event,
|
|
365
|
+
id: Math.random().toString(36).substr(2, 9),
|
|
366
|
+
timestamp: Date.now()
|
|
367
|
+
};
|
|
368
|
+
this.events.push(eventWithId);
|
|
369
|
+
}
|
|
370
|
+
getEvents() {
|
|
371
|
+
return [...this.events];
|
|
372
|
+
}
|
|
373
|
+
clearEvents() {
|
|
374
|
+
this.events = [];
|
|
375
|
+
}
|
|
376
|
+
createAlert(alert) {
|
|
377
|
+
return {
|
|
378
|
+
...alert,
|
|
379
|
+
id: Math.random().toString(36).substr(2, 9),
|
|
380
|
+
timestamp: /* @__PURE__ */ new Date()
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
};
|
|
384
|
+
var securityMonitor = new SecurityMonitor();
|
|
385
|
+
|
|
380
386
|
// src/constants/performance.ts
|
|
381
387
|
var PERFORMANCE_THRESHOLDS = {
|
|
382
388
|
RENDER_TIME: 16,
|
|
@@ -393,7 +399,7 @@ var PERFORMANCE_THRESHOLDS = {
|
|
|
393
399
|
// 250KB bundle size limit
|
|
394
400
|
};
|
|
395
401
|
|
|
396
|
-
// src/utils/performanceBenchmark.ts
|
|
402
|
+
// src/utils/performance/performanceBenchmark.ts
|
|
397
403
|
function createPerformanceBenchmark(name) {
|
|
398
404
|
const startTime = performance.now();
|
|
399
405
|
const startMemory = performance.memory?.usedJSHeapSize || 0;
|
|
@@ -436,7 +442,7 @@ function measureRenderPerformance(componentName, renderFn) {
|
|
|
436
442
|
return metrics;
|
|
437
443
|
}
|
|
438
444
|
|
|
439
|
-
// src/utils/bundleAnalysis.ts
|
|
445
|
+
// src/utils/performance/bundleAnalysis.ts
|
|
440
446
|
var BundleAnalyzer = class {
|
|
441
447
|
constructor() {
|
|
442
448
|
this.enabled = import.meta.env.MODE === "development";
|
|
@@ -522,7 +528,7 @@ function trackDynamicImport(moduleName) {
|
|
|
522
528
|
console.log("Dynamic import: " + moduleName + " - Good for code splitting!");
|
|
523
529
|
}
|
|
524
530
|
|
|
525
|
-
// src/utils/dynamicUtils.ts
|
|
531
|
+
// src/utils/dynamic/dynamicUtils.ts
|
|
526
532
|
var loadLodash = async () => {
|
|
527
533
|
const [debounceModule, throttleModule] = await Promise.all([
|
|
528
534
|
import("lodash.debounce"),
|
|
@@ -579,7 +585,7 @@ var lazyChartUtils = createLazyUtility(loadChartUtils);
|
|
|
579
585
|
var lazyFormUtils = createLazyUtility(loadFormUtils);
|
|
580
586
|
var lazyCSVUtils = createLazyUtility(loadCSVUtils);
|
|
581
587
|
|
|
582
|
-
// src/utils/lazyLoad.tsx
|
|
588
|
+
// src/utils/dynamic/lazyLoad.tsx
|
|
583
589
|
import { Suspense, lazy } from "react";
|
|
584
590
|
import { jsx } from "react/jsx-runtime";
|
|
585
591
|
function createLazyComponent(importFn, componentName, options = {}) {
|
|
@@ -596,11 +602,11 @@ function createLazyComponent(importFn, componentName, options = {}) {
|
|
|
596
602
|
return WrappedComponent;
|
|
597
603
|
}
|
|
598
604
|
var LazyDataTable = createLazyComponent(
|
|
599
|
-
() => import("./DataTable-
|
|
605
|
+
() => import("./DataTable-6M4L6BI2.js").then((module) => ({ default: module.DataTable })),
|
|
600
606
|
"DataTable"
|
|
601
607
|
);
|
|
602
608
|
|
|
603
|
-
// src/utils/permissionUtils.ts
|
|
609
|
+
// src/utils/permissions/permissionUtils.ts
|
|
604
610
|
function transformPermissionMapToBoolean(permissions) {
|
|
605
611
|
const result = {};
|
|
606
612
|
Object.entries(permissions).forEach(([key, value]) => {
|
|
@@ -625,7 +631,7 @@ function hasAllPermissions(permissions, permissionList) {
|
|
|
625
631
|
return permissionList.every((permission) => hasPermission(permissions, permission));
|
|
626
632
|
}
|
|
627
633
|
|
|
628
|
-
// src/utils/permissionTypes.ts
|
|
634
|
+
// src/utils/permissions/permissionTypes.ts
|
|
629
635
|
var PermissionType = /* @__PURE__ */ ((PermissionType2) => {
|
|
630
636
|
PermissionType2["READ"] = "read";
|
|
631
637
|
PermissionType2["WRITE"] = "write";
|
|
@@ -651,52 +657,7 @@ function parsePermission(permission) {
|
|
|
651
657
|
};
|
|
652
658
|
}
|
|
653
659
|
|
|
654
|
-
// src/utils/
|
|
655
|
-
import { z as z3 } from "zod";
|
|
656
|
-
function pickSchema(schema, keys) {
|
|
657
|
-
const shape = Object.entries(schema.shape).filter(([key]) => keys.includes(key)).reduce((acc, [key, value]) => {
|
|
658
|
-
acc[key] = value;
|
|
659
|
-
return acc;
|
|
660
|
-
}, {});
|
|
661
|
-
return z3.object(shape);
|
|
662
|
-
}
|
|
663
|
-
function combineSchemas(schemas) {
|
|
664
|
-
return schemas.reduce(
|
|
665
|
-
(merged, schema) => merged.merge(schema),
|
|
666
|
-
z3.object({})
|
|
667
|
-
);
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
// src/utils/securityMonitor.ts
|
|
671
|
-
var SecurityMonitor = class {
|
|
672
|
-
constructor() {
|
|
673
|
-
this.events = [];
|
|
674
|
-
}
|
|
675
|
-
logEvent(event) {
|
|
676
|
-
const eventWithId = {
|
|
677
|
-
...event,
|
|
678
|
-
id: Math.random().toString(36).substr(2, 9),
|
|
679
|
-
timestamp: Date.now()
|
|
680
|
-
};
|
|
681
|
-
this.events.push(eventWithId);
|
|
682
|
-
}
|
|
683
|
-
getEvents() {
|
|
684
|
-
return [...this.events];
|
|
685
|
-
}
|
|
686
|
-
clearEvents() {
|
|
687
|
-
this.events = [];
|
|
688
|
-
}
|
|
689
|
-
createAlert(alert) {
|
|
690
|
-
return {
|
|
691
|
-
...alert,
|
|
692
|
-
id: Math.random().toString(36).substr(2, 9),
|
|
693
|
-
timestamp: /* @__PURE__ */ new Date()
|
|
694
|
-
};
|
|
695
|
-
}
|
|
696
|
-
};
|
|
697
|
-
var securityMonitor = new SecurityMonitor();
|
|
698
|
-
|
|
699
|
-
// src/utils/audit.ts
|
|
660
|
+
// src/utils/audit/audit.ts
|
|
700
661
|
var AuditLogger = class {
|
|
701
662
|
constructor() {
|
|
702
663
|
this.events = [];
|
|
@@ -777,7 +738,7 @@ function logAuditEvent(action, user, details) {
|
|
|
777
738
|
});
|
|
778
739
|
}
|
|
779
740
|
|
|
780
|
-
// src/utils/deviceFingerprint.ts
|
|
741
|
+
// src/utils/device/deviceFingerprint.ts
|
|
781
742
|
init_secureStorage();
|
|
782
743
|
function generateDeviceFingerprint() {
|
|
783
744
|
try {
|
|
@@ -908,33 +869,37 @@ function generateFallbackFingerprint() {
|
|
|
908
869
|
// src/utils/index.ts
|
|
909
870
|
init_organisationContext();
|
|
910
871
|
export {
|
|
911
|
-
|
|
872
|
+
CachedAppIdResolver,
|
|
912
873
|
DebugLogger,
|
|
913
874
|
LazyDataTable,
|
|
875
|
+
LogLevel,
|
|
876
|
+
Logger,
|
|
914
877
|
PERFORMANCE_BUDGETS,
|
|
915
878
|
PERFORMANCE_THRESHOLDS,
|
|
916
879
|
PermissionType,
|
|
917
|
-
RateLimiter,
|
|
918
880
|
auditLog,
|
|
919
881
|
auditLogger,
|
|
920
882
|
bundleAnalyzer,
|
|
883
|
+
cachedAppIdResolver,
|
|
921
884
|
clearOrganisationContext,
|
|
922
885
|
cn,
|
|
923
886
|
combineSchemas,
|
|
924
887
|
createLazyComponent,
|
|
925
888
|
createLazyUtility,
|
|
889
|
+
createLogger,
|
|
926
890
|
createPerformanceBenchmark,
|
|
927
891
|
deepMerge,
|
|
928
|
-
emailSchema,
|
|
892
|
+
emailSchema3 as emailSchema,
|
|
929
893
|
formatCompactNumber,
|
|
930
894
|
formatCurrency,
|
|
931
895
|
formatDate,
|
|
932
896
|
formatFileSize,
|
|
933
897
|
formatNumber,
|
|
934
898
|
formatPercent,
|
|
935
|
-
generateCSPHeader,
|
|
936
899
|
generateDeviceFingerprint,
|
|
937
900
|
getAppConfig,
|
|
901
|
+
getAppId,
|
|
902
|
+
getAppIds,
|
|
938
903
|
getAppNameFromBuildTime,
|
|
939
904
|
getAppNameFromEnvironment,
|
|
940
905
|
getAppNameFromGlobal,
|
|
@@ -969,29 +934,24 @@ export {
|
|
|
969
934
|
logAuthEvent,
|
|
970
935
|
logPermissionEvent,
|
|
971
936
|
logSecurityEvent2 as logSecurityEvent,
|
|
937
|
+
logger,
|
|
972
938
|
matchesPattern,
|
|
973
939
|
measureRenderPerformance,
|
|
974
|
-
nameSchema,
|
|
940
|
+
nameSchema3 as nameSchema,
|
|
975
941
|
parsePermission,
|
|
976
|
-
passwordSchema,
|
|
942
|
+
passwordSchema2 as passwordSchema,
|
|
977
943
|
performanceBudgetMonitor,
|
|
978
|
-
phoneSchema,
|
|
944
|
+
phoneSchema3 as phoneSchema,
|
|
979
945
|
pickSchema,
|
|
980
|
-
sanitizeEmail,
|
|
981
|
-
sanitizeFileName,
|
|
982
946
|
sanitizeFormData,
|
|
983
|
-
sanitizePhoneNumber,
|
|
984
|
-
sanitizeSqlInput,
|
|
985
|
-
sanitizeUrl,
|
|
986
947
|
sanitizeUserInput,
|
|
987
|
-
sanitizeUserInput_deprecated,
|
|
988
948
|
securityMonitor,
|
|
989
949
|
setAppConfig,
|
|
990
950
|
setOrganisationContext,
|
|
991
951
|
setRBACAppName,
|
|
992
952
|
trackDynamicImport,
|
|
993
953
|
transformPermissionMapToBoolean,
|
|
994
|
-
urlSchema,
|
|
954
|
+
urlSchema3 as urlSchema,
|
|
995
955
|
useComponentPerformance,
|
|
996
956
|
useSessionTracking,
|
|
997
957
|
usernameSchema,
|