@jmruthers/pace-core 0.5.181 → 0.5.183
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/README.md +16 -2
- package/dist/{AuthService-DYuQPJj6.d.ts → AuthService-B-cd2MA4.d.ts} +9 -11
- package/dist/{DataTable-CWAZZcXC.d.ts → DataTable-Bz8ffqyA.d.ts} +1 -1
- package/dist/{DataTable-UA6CL4JI.js → DataTable-QAB34V6K.js} +14 -15
- package/dist/UnifiedAuthProvider-7F6T4B6K.js +13 -0
- package/dist/{UnifiedAuthProvider-DJxGTftH.d.ts → UnifiedAuthProvider-F86d7dSi.d.ts} +5 -6
- package/dist/{api-45XYYO2A.js → api-ROMBCNKU.js} +5 -5
- package/dist/{audit-64X3VJXB.js → audit-WRS3KJKI.js} +4 -4
- package/dist/auth-BZOJqrdd.d.ts +49 -0
- package/dist/{chunk-CX5M4ZAG.js → chunk-5DRSZLL2.js} +1 -1
- package/dist/chunk-5DRSZLL2.js.map +1 -0
- package/dist/{chunk-BESYRHQM.js → chunk-6C4YBBJM.js} +10 -7
- package/dist/chunk-6C4YBBJM.js.map +1 -0
- package/dist/{chunk-PLDDJCW6.js → chunk-7D4SUZUM.js} +2 -13
- package/dist/{chunk-HRO5HWN2.js → chunk-CSOFYHAG.js} +55 -162
- package/dist/chunk-CSOFYHAG.js.map +1 -0
- package/dist/{chunk-ANBQRTPX.js → chunk-E66EQZE6.js} +3 -5
- package/dist/{chunk-ANBQRTPX.js.map → chunk-E66EQZE6.js.map} +1 -1
- package/dist/{chunk-Q5QRDWKI.js → chunk-F2IMUDXZ.js} +4 -6
- package/dist/chunk-F2IMUDXZ.js.map +1 -0
- package/dist/{chunk-SBVILCCA.js → chunk-FSFQFJCU.js} +28 -6
- package/dist/chunk-FSFQFJCU.js.map +1 -0
- package/dist/chunk-FUEYYMX5.js +2296 -0
- package/dist/chunk-FUEYYMX5.js.map +1 -0
- package/dist/{chunk-FFKNH6U5.js → chunk-HKIT6O7W.js} +3 -5
- package/dist/{chunk-FFKNH6U5.js.map → chunk-HKIT6O7W.js.map} +1 -1
- package/dist/chunk-KQCRWDSA.js +1 -0
- package/dist/{chunk-S5OFRT4M.js → chunk-KUEN3HFB.js} +6 -6
- package/dist/chunk-KUEN3HFB.js.map +1 -0
- package/dist/chunk-LMC26NLJ.js +84 -0
- package/dist/chunk-LMC26NLJ.js.map +1 -0
- package/dist/{chunk-BVYWGZVV.js → chunk-M7W4CP3M.js} +52 -19
- package/dist/chunk-M7W4CP3M.js.map +1 -0
- package/dist/{chunk-HZLDFOE4.js → chunk-MI7HBHN3.js} +164 -243
- package/dist/chunk-MI7HBHN3.js.map +1 -0
- package/dist/{chunk-PPMP5J6T.js → chunk-PWAHJW4G.js} +180 -29
- package/dist/chunk-PWAHJW4G.js.map +1 -0
- package/dist/chunk-PWLANIRT.js +127 -0
- package/dist/{chunk-XDNLUEXI.js.map → chunk-PWLANIRT.js.map} +1 -1
- package/dist/chunk-QCDXODCA.js +75 -0
- package/dist/chunk-QCDXODCA.js.map +1 -0
- package/dist/{chunk-D7LCGMVS.js → chunk-QETLRQI6.js} +526 -887
- package/dist/chunk-QETLRQI6.js.map +1 -0
- package/dist/{chunk-5MT24GKJ.js → chunk-QUVSNGIP.js} +264 -262
- package/dist/chunk-QUVSNGIP.js.map +1 -0
- package/dist/chunk-QXHPKYJV.js +113 -0
- package/dist/chunk-QXHPKYJV.js.map +1 -0
- package/dist/{chunk-OWAG3GSU.js → chunk-R77UEZ4E.js} +11 -1
- package/dist/chunk-R77UEZ4E.js.map +1 -0
- package/dist/{chunk-ZYTYSTO5.js → chunk-RA3JUFMW.js} +314 -161
- package/dist/chunk-RA3JUFMW.js.map +1 -0
- package/dist/{chunk-ERISIBYU.js → chunk-SQGMNID3.js} +3 -8
- package/dist/chunk-SQGMNID3.js.map +1 -0
- package/dist/{chunk-XJ2HZOBU.js → chunk-UHNYIBXL.js} +1 -1
- package/dist/chunk-UHNYIBXL.js.map +1 -0
- package/{src/utils/secureStorage.ts → dist/chunk-VBXEHIUJ.js} +113 -88
- package/dist/{chunk-7QCC6MCP.js.map → chunk-VBXEHIUJ.js.map} +1 -1
- package/dist/{chunk-VZ4VDGTB.js → chunk-W22JP75J.js} +5 -13
- package/dist/{chunk-VZ4VDGTB.js.map → chunk-W22JP75J.js.map} +1 -1
- package/dist/components.d.ts +12 -93
- package/dist/components.js +23 -106
- package/dist/components.js.map +1 -1
- package/dist/core-CUElvH_C.d.ts +164 -0
- package/dist/database.generated-CBmg2950.d.ts +8284 -0
- package/dist/event-CW5YB_2p.d.ts +239 -0
- package/dist/{file-reference-C6Gkn77H.d.ts → file-reference-D06mEEWW.d.ts} +7 -5
- package/dist/functions-D_kgHktt.d.ts +208 -0
- package/dist/hooks.d.ts +54 -7
- package/dist/hooks.js +204 -17
- package/dist/hooks.js.map +1 -1
- package/dist/{EventLogo-B3V3otev.d.ts → index-Bl--n7-T.d.ts} +387 -397
- package/dist/index.d.ts +94 -261
- package/dist/index.js +314 -126
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +7 -8
- package/dist/providers.js +6 -13
- package/dist/rbac/index.d.ts +171 -101
- package/dist/rbac/index.js +23 -17
- package/dist/styles/index.d.ts +1 -3
- package/dist/styles/index.js +2 -17
- package/dist/theming/runtime.js +3 -3
- package/dist/types-UU913iLA.d.ts +102 -0
- package/dist/{types-Dfz9dmVH.d.ts → types-_x1f4QBF.d.ts} +6 -6
- package/dist/types.d.ts +88 -227
- package/dist/types.js +64 -112
- package/dist/types.js.map +1 -1
- package/dist/{usePublicRouteParams-B7PabvuH.d.ts → usePublicRouteParams-JJczomYq.d.ts} +203 -6
- package/dist/utils.d.ts +299 -13
- package/dist/utils.js +481 -55
- package/dist/utils.js.map +1 -1
- package/dist/validation-643vUDZW.d.ts +177 -0
- package/docs/DOCUMENTATION_REVIEW_TRACKER.md +511 -0
- package/docs/README.md +9 -8
- package/docs/api/README.md +16 -2
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +4 -4
- package/docs/api/classes/MissingUserContextError.md +4 -4
- package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
- package/docs/api/classes/PermissionDeniedError.md +4 -4
- package/docs/api/classes/RBACAuditManager.md +14 -14
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +2 -2
- package/docs/api/classes/RBACError.md +4 -4
- package/docs/api/classes/RBACNotInitializedError.md +4 -4
- package/docs/api/classes/SecureSupabaseClient.md +29 -9
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +17 -17
- package/docs/api/enums/RBACErrorCode.md +228 -0
- package/docs/api/enums/RPCFunction.md +118 -0
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/BadgeProps.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +2 -2
- package/docs/api/interfaces/CalendarProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +29 -3
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +1 -1
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +2 -2
- package/docs/api/interfaces/DataTableColumn.md +6 -6
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +2 -2
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/ExportColumn.md +5 -5
- package/docs/api/interfaces/ExportOptions.md +4 -4
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +13 -13
- package/docs/api/interfaces/FileReference.md +12 -12
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +10 -10
- package/docs/api/interfaces/FileUploadProps.md +19 -19
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/FormFieldProps.md +166 -0
- package/docs/api/interfaces/FormProps.md +113 -0
- package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +8 -8
- package/docs/api/interfaces/InputProps.md +2 -2
- package/docs/api/interfaces/LabelProps.md +8 -8
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +17 -73
- package/docs/api/interfaces/NavigationMenuProps.md +38 -53
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +13 -13
- package/docs/api/interfaces/OrganisationContextType.md +21 -21
- package/docs/api/interfaces/OrganisationMembership.md +15 -15
- package/docs/api/interfaces/OrganisationProviderProps.md +59 -2
- package/docs/api/interfaces/OrganisationSecurityError.md +5 -5
- package/docs/api/interfaces/PaceAppLayoutProps.md +26 -39
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProgressProps.md +50 -0
- package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
- package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
- package/docs/api/interfaces/PublicPageLayoutProps.md +15 -15
- package/docs/api/interfaces/RBACAccessValidateParams.md +52 -0
- package/docs/api/interfaces/RBACAccessValidateResult.md +41 -0
- package/docs/api/interfaces/RBACAuditLogParams.md +85 -0
- package/docs/api/interfaces/RBACAuditLogResult.md +52 -0
- package/docs/api/interfaces/RBACConfig.md +2 -2
- package/docs/api/interfaces/RBACContext.md +52 -0
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +74 -0
- package/docs/api/interfaces/RBACPermissionCheckParams.md +74 -0
- package/docs/api/interfaces/RBACPermissionCheckResult.md +52 -0
- package/docs/api/interfaces/RBACPermissionsGetParams.md +63 -0
- package/docs/api/interfaces/RBACPermissionsGetResult.md +63 -0
- package/docs/api/interfaces/RBACResult.md +58 -0
- package/docs/api/interfaces/RBACRoleGrantParams.md +63 -0
- package/docs/api/interfaces/RBACRoleGrantResult.md +52 -0
- package/docs/api/interfaces/RBACRoleRevokeParams.md +63 -0
- package/docs/api/interfaces/RBACRoleRevokeResult.md +52 -0
- package/docs/api/interfaces/RBACRoleValidateParams.md +52 -0
- package/docs/api/interfaces/RBACRoleValidateResult.md +63 -0
- package/docs/api/interfaces/RBACRolesListParams.md +52 -0
- package/docs/api/interfaces/RBACRolesListResult.md +74 -0
- package/docs/api/interfaces/RBACSessionTrackParams.md +74 -0
- package/docs/api/interfaces/RBACSessionTrackResult.md +52 -0
- package/docs/api/interfaces/ResourcePermissions.md +1 -1
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RoleManagementResult.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +15 -2
- 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/TabsContentProps.md +1 -1
- package/docs/api/interfaces/TabsListProps.md +1 -1
- package/docs/api/interfaces/TabsProps.md +1 -1
- package/docs/api/interfaces/TabsTriggerProps.md +43 -2
- package/docs/api/interfaces/TextareaProps.md +2 -2
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +61 -61
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
- package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
- package/docs/api/interfaces/UsePublicEventReturn.md +5 -5
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +2 -2
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeOptions.md +2 -2
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +1 -1
- package/docs/api/interfaces/UserMenuProps.md +4 -4
- package/docs/api/interfaces/UserProfile.md +7 -7
- package/docs/api/modules.md +484 -462
- package/docs/api-reference/components.md +186 -15
- package/docs/api-reference/deprecated.md +376 -0
- package/docs/api-reference/hooks.md +149 -19
- package/docs/api-reference/providers.md +61 -6
- package/docs/api-reference/rpc-functions.md +397 -0
- package/docs/api-reference/types.md +135 -78
- package/docs/api-reference/utilities.md +51 -380
- package/docs/architecture/README.md +49 -3
- package/docs/architecture/database-schema-requirements.md +40 -3
- package/docs/architecture/rbac-security-architecture.md +41 -4
- package/docs/architecture/services.md +127 -42
- package/docs/best-practices/README.md +51 -5
- package/docs/best-practices/accessibility.md +32 -3
- package/docs/best-practices/common-patterns.md +50 -3
- package/docs/best-practices/deployment.md +50 -4
- package/docs/best-practices/performance.md +50 -3
- package/docs/best-practices/security.md +94 -41
- package/docs/best-practices/testing.md +33 -4
- package/docs/core-concepts/authentication.md +5 -5
- package/docs/core-concepts/events.md +3 -3
- package/docs/core-concepts/organisations.md +3 -3
- package/docs/core-concepts/permissions.md +3 -3
- package/docs/core-concepts/rbac-system.md +5 -5
- package/docs/documentation-index.md +30 -8
- package/docs/getting-started/documentation-index.md +1 -1
- package/docs/getting-started/examples/README.md +7 -5
- package/docs/getting-started/examples/basic-auth-app.md +3 -0
- package/docs/getting-started/examples/full-featured-app.md +5 -3
- package/docs/getting-started/faq.md +6 -6
- package/docs/getting-started/installation-guide.md +192 -13
- package/docs/getting-started/local-development.md +303 -0
- package/docs/getting-started/quick-reference.md +3 -3
- package/docs/getting-started/quick-start.md +517 -0
- package/docs/implementation-guides/app-layout.md +45 -3
- package/docs/implementation-guides/authentication.md +66 -7
- package/docs/implementation-guides/component-styling.md +53 -3
- package/docs/implementation-guides/data-tables.md +76 -7
- package/docs/implementation-guides/datatable-filtering.md +1 -2
- package/docs/implementation-guides/datatable-rbac-usage.md +0 -1
- package/docs/implementation-guides/dynamic-colors.md +155 -4
- package/docs/implementation-guides/file-reference-system.md +72 -3
- package/docs/implementation-guides/file-upload-storage.md +72 -3
- package/docs/implementation-guides/forms.md +53 -3
- package/docs/implementation-guides/inactivity-tracking.md +53 -3
- package/docs/implementation-guides/large-datasets.md +1 -1
- package/docs/implementation-guides/navigation.md +55 -5
- package/docs/implementation-guides/organisation-security.md +72 -3
- package/docs/implementation-guides/performance.md +57 -1
- package/docs/implementation-guides/permission-enforcement.md +81 -8
- package/docs/implementation-guides/public-pages.md +560 -14
- package/docs/migration/MIGRATION_GUIDE.md +409 -50
- package/docs/migration/README.md +37 -3
- package/docs/migration/organisation-context-timing-fix.md +39 -4
- package/docs/migration/quick-migration-guide.md +41 -5
- package/docs/migration/rbac-migration.md +59 -3
- package/docs/migration/service-architecture.md +77 -14
- package/docs/rbac/README.md +79 -3
- package/docs/rbac/advanced-patterns.md +47 -3
- package/docs/rbac/api-reference.md +77 -8
- package/docs/rbac/event-based-apps.md +50 -5
- package/docs/rbac/examples/rbac-rls-integration-example.md +3 -3
- package/docs/rbac/examples.md +39 -3
- package/docs/rbac/getting-started.md +63 -4
- package/docs/rbac/quick-start.md +57 -5
- package/docs/rbac/rbac-rls-integration.md +68 -6
- package/docs/rbac/super-admin-guide.md +47 -3
- package/docs/rbac/troubleshooting.md +3 -3
- package/docs/security/README.md +68 -3
- package/docs/security/checklist.md +50 -3
- package/docs/standards/01-architecture-standard.md +39 -0
- package/docs/standards/02-api-and-rpc-standard.md +39 -0
- package/docs/standards/03-component-standard.md +32 -0
- package/docs/standards/04-code-style-standard.md +32 -0
- package/docs/standards/05-security-standard.md +30 -0
- package/docs/standards/06-testing-and-docs-standard.md +29 -0
- package/docs/standards/README.md +35 -0
- package/docs/styles/README.md +89 -8
- package/docs/testing/README.md +175 -24
- package/docs/troubleshooting/README.md +50 -3
- package/docs/troubleshooting/common-issues.md +271 -5
- package/docs/troubleshooting/debugging.md +54 -1
- package/docs/troubleshooting/migration.md +54 -1
- package/docs/troubleshooting/organisation-context-setup.md +29 -3
- package/docs/troubleshooting/styling-issues.md +246 -4
- package/{src/components/DataTable/examples → examples/DataTable}/GroupingAggregationExample.tsx +1 -1
- package/examples/{components 2/DataTable/HierarchicalActionsExample.tsx → DataTable/HierarchicalActionsExample.tsx} +7 -6
- package/{src/components/DataTable/examples → examples/DataTable}/HierarchicalExample.tsx +8 -6
- package/examples/{components 2/DataTable/PerformanceExample.tsx → DataTable/PerformanceExample.tsx} +2 -2
- package/examples/{components 2/DataTable/index.ts → DataTable/index.ts} +1 -0
- package/{src/components/Dialog/examples → examples/Dialog}/HtmlDialogExample.tsx +3 -3
- package/examples/{components 2/Dialog/ScrollableDialogExample.tsx → Dialog/ScrollableDialogExample.tsx} +1 -1
- package/{src/components/Dialog/examples → examples/Dialog}/SmartDialogExample.tsx +1 -1
- package/examples/{components 2/Dialog/index.ts → Dialog/index.ts} +0 -3
- package/examples/{features/public-pages → PublicPages}/CorrectPublicPageImplementation.tsx +52 -17
- package/examples/{features/public-pages → PublicPages}/PublicEventPage.tsx +65 -35
- package/examples/{features/public-pages → PublicPages}/PublicPageApp.tsx +52 -18
- package/examples/{features/public-pages → PublicPages}/PublicPageUsageExample.tsx +28 -15
- package/examples/README.md +81 -33
- package/examples/index.ts +14 -12
- package/examples/{RBAC → rbac}/CompleteRBACExample.tsx +1 -1
- package/examples/{features/rbac → rbac}/EventBasedApp.tsx +4 -4
- package/examples/{features/rbac → rbac}/PermissionExample.tsx +5 -3
- package/package.json +21 -27
- package/src/__tests__/helpers/test-utils.tsx +29 -3
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +7 -5
- package/src/components/Alert/Alert.test.tsx +2 -2
- package/src/components/Alert/Alert.tsx +4 -4
- package/src/components/Avatar/Avatar.test.tsx +17 -6
- package/src/components/Badge/Badge.test.tsx +1 -1
- package/src/components/Badge/Badge.tsx +2 -2
- package/src/components/Button/Button.test.tsx +2 -2
- package/src/components/Button/Button.tsx +11 -7
- package/src/components/Calendar/Calendar.test.tsx +41 -8
- package/src/components/Calendar/Calendar.tsx +39 -36
- package/src/components/Card/Card.tsx +51 -13
- package/src/components/Checkbox/Checkbox.test.tsx +36 -12
- package/src/components/DataTable/DataTable.test.tsx +1 -1
- package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +13 -7
- package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +14 -42
- package/src/components/DataTable/__tests__/DataTable.export.test.tsx +13 -10
- package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +14 -11
- package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +4 -2
- package/src/components/DataTable/__tests__/DataTable.test.tsx +13 -7
- package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +13 -10
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +15 -11
- package/src/components/DataTable/__tests__/a11y.basic.test.tsx +12 -6
- package/src/components/DataTable/__tests__/keyboard.test.tsx +12 -6
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +10 -6
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +1 -1
- package/src/components/DataTable/components/DataTableBody.tsx +10 -25
- package/src/components/DataTable/components/DataTableCore.tsx +1 -1
- package/src/components/DataTable/components/FilterRow.tsx +3 -1
- package/src/components/DataTable/components/ImportModal.tsx +1 -1
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +9 -9
- package/src/components/DataTable/core/ColumnFactory.ts +6 -6
- package/src/components/DataTable/core/DataTableContext.tsx +14 -10
- package/src/components/DataTable/core/LocalDataAdapter.ts +2 -1
- package/src/components/DataTable/core/PluginRegistry.ts +3 -3
- package/src/components/DataTable/core/StateManager.ts +12 -11
- package/src/components/DataTable/core/__tests__/ActionManager.test.ts +104 -0
- package/src/components/DataTable/core/__tests__/DataManager.test.ts +101 -0
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +84 -0
- package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +102 -0
- package/src/components/DataTable/core/__tests__/StateManager.test.ts +104 -0
- package/src/components/DataTable/core/interfaces.ts +17 -17
- package/src/components/DataTable/hooks/__tests__/useDataTableConfiguration.test.ts +124 -0
- package/src/components/DataTable/hooks/__tests__/useDataTableDataPipeline.test.ts +117 -0
- package/src/components/DataTable/hooks/__tests__/useDataTablePermissions.test.ts +102 -0
- package/src/components/DataTable/hooks/__tests__/useEffectiveColumnOrder.test.ts +53 -0
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +0 -2
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +9 -8
- package/src/components/DataTable/types.ts +5 -5
- package/src/components/DataTable/utils/aggregationUtils.ts +4 -4
- package/src/components/DataTable/utils/columnUtils.ts +3 -2
- package/src/components/DataTable/utils/debugTools.ts +1 -1
- package/src/components/DataTable/utils/exportUtils.ts +6 -6
- package/src/components/DataTable/utils/hierarchicalSorting.ts +6 -6
- package/src/components/DataTable/utils/hierarchicalUtils.ts +0 -8
- package/src/components/DataTable/utils/index.ts +0 -1
- package/src/components/DataTable/utils/performanceUtils.ts +9 -4
- package/src/components/Dialog/Dialog.test.tsx +49 -27
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +13 -8
- package/src/components/EventSelector/EventSelector.test.tsx +60 -12
- package/src/components/EventSelector/EventSelector.tsx +38 -15
- package/src/components/EventSelector/index.ts +2 -2
- package/src/components/FileDisplay/FileDisplay.test.tsx +143 -85
- package/src/components/FileDisplay/FileDisplay.tsx +1 -0
- package/src/components/FileUpload/FileUpload.test.tsx +532 -152
- package/src/components/FileUpload/FileUpload.tsx +43 -8
- package/src/components/Footer/Footer.test.tsx +19 -14
- package/src/components/Form/Form.test.tsx +96 -14
- package/src/components/Form/Form.tsx +210 -1
- package/src/components/Form/index.ts +3 -7
- package/src/components/Header/Header.test.tsx +24 -17
- package/src/components/Header/Header.tsx +3 -1
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +2 -4
- package/src/components/Input/Input.test.tsx +61 -36
- package/src/components/Label/{__tests__/Label.test.tsx → Label.test.tsx} +2 -2
- package/src/components/Label/Label.tsx +2 -3
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +6 -5
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +6 -2
- package/src/components/LoginForm/LoginForm.test.tsx +14 -13
- package/src/components/LoginForm/LoginForm.tsx +1 -1
- package/src/components/LoginForm/index.ts +7 -0
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +233 -20
- package/src/components/NavigationMenu/NavigationMenu.tsx +191 -55
- package/src/components/NavigationMenu/index.ts +1 -1
- package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +20 -11
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +1 -1
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.integration.test.tsx → PaceAppLayout.integration.test.tsx} +272 -79
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.performance.test.tsx → PaceAppLayout.performance.test.tsx} +155 -32
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.security.test.tsx → PaceAppLayout.security.test.tsx} +211 -65
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +498 -210
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +63 -64
- package/src/components/PaceAppLayout/test-setup.tsx +192 -0
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +193 -39
- package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.test.tsx +2 -2
- package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.tsx +10 -4
- package/src/components/PasswordChange/index.ts +2 -0
- package/src/components/Progress/Progress.test.tsx +11 -0
- package/src/components/Progress/Progress.tsx +1 -1
- package/src/components/Progress/index.ts +10 -0
- package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +2 -1
- package/src/components/PublicLayout/PublicLayout.test.tsx +1210 -0
- package/src/components/PublicLayout/PublicPageLayout.tsx +190 -36
- package/src/components/PublicLayout/PublicPageProvider.tsx +8 -7
- package/src/components/PublicLayout/index.ts +10 -28
- package/src/components/Select/Select.test.tsx +7 -7
- package/src/components/Select/Select.tsx +277 -11
- package/src/components/Select/index.ts +1 -2
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.test.tsx +232 -0
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +40 -19
- package/src/components/Table/{__tests__/Table.test.tsx → Table.test.tsx} +94 -41
- package/src/components/Tabs/Tabs.test.tsx +10 -9
- package/src/components/Tabs/Tabs.tsx +61 -33
- package/src/components/Textarea/Textarea.test.tsx +31 -18
- package/src/components/Toast/Toast.tsx +2 -2
- package/src/components/Tooltip/Tooltip.test.tsx +1 -1
- package/src/components/UserMenu/UserMenu.test.tsx +7 -6
- package/src/components/UserMenu/UserMenu.tsx +2 -2
- package/src/components/index.ts +5 -4
- package/src/constants/performance.ts +19 -8
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +21 -22
- package/src/hooks/__tests__/useEvents.unit.test.ts +5 -4
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +2 -2
- package/src/hooks/__tests__/usePermissionCache.simple.test.ts +17 -0
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +16 -11
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +1 -3
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +1 -3
- package/src/hooks/__tests__/useRBAC.unit.test.ts +24 -2
- package/src/hooks/index.ts +4 -0
- package/src/hooks/public/index.ts +2 -0
- package/src/hooks/public/usePublicEvent.ts +4 -6
- package/src/hooks/public/usePublicEventLogo.test.ts +147 -0
- package/src/hooks/public/usePublicRouteParams.ts +1 -1
- package/src/hooks/services/useAuth.ts +2 -4
- package/src/hooks/services/useCurrentEvent.ts +1 -1
- package/src/hooks/useAppConfig.ts +1 -1
- package/src/hooks/useDataTablePerformance.ts +2 -2
- package/src/hooks/useEventTheme.ts +1 -1
- package/src/hooks/useEvents.ts +51 -10
- package/src/hooks/useOrganisationPermissions.test.ts +3 -3
- package/src/hooks/useOrganisationPermissions.ts +1 -1
- package/src/hooks/useOrganisationSecurity.ts +2 -2
- package/src/hooks/usePermissionCache.test.ts +9 -9
- package/src/hooks/usePermissionCache.ts +2 -2
- package/src/index.ts +19 -12
- package/src/providers/OrganisationProvider.tsx +73 -9
- package/src/providers/UnifiedAuthProvider.smoke.test.tsx +113 -13
- package/src/providers/__tests__/AuthProvider.test.tsx +2 -1
- package/src/providers/__tests__/EventProvider.test.tsx +24 -15
- package/src/providers/__tests__/OrganisationProvider.test.tsx +87 -36
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +80 -24
- package/src/providers/index.ts +0 -3
- package/src/providers/services/AuthServiceProvider.tsx +2 -17
- package/src/providers/services/EventServiceProvider.tsx +11 -16
- package/src/providers/services/InactivityServiceProvider.tsx +9 -12
- package/src/providers/services/OrganisationServiceProvider.tsx +9 -12
- package/src/providers/services/UnifiedAuthProvider.tsx +85 -18
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +11 -4
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +105 -21
- package/src/rbac/adapters.tsx +1 -1
- package/src/rbac/api.ts +20 -4
- package/src/rbac/audit-enhanced.ts +47 -2
- package/src/rbac/audit.ts +47 -2
- package/src/rbac/components/NavigationGuard.tsx +1 -1
- package/src/rbac/components/NavigationProvider.test.tsx +7 -6
- package/src/rbac/components/NavigationProvider.tsx +1 -1
- package/src/rbac/components/PagePermissionGuard.tsx +1 -1
- package/src/rbac/components/PagePermissionProvider.test.tsx +7 -6
- package/src/rbac/components/PagePermissionProvider.tsx +1 -1
- package/src/rbac/components/PermissionEnforcer.tsx +1 -1
- package/src/rbac/components/RoleBasedRouter.tsx +1 -1
- package/src/rbac/components/SecureDataProvider.test.tsx +7 -6
- package/src/rbac/components/SecureDataProvider.tsx +1 -1
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +6 -6
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +11 -10
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +10 -11
- package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +19 -15
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +13 -12
- package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +19 -15
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +18 -18
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +11 -10
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +8 -7
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +10 -11
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +48 -19
- package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +476 -0
- package/src/rbac/hooks/index.ts +3 -0
- package/src/rbac/hooks/usePermissions.ts +31 -85
- package/src/rbac/hooks/useRBAC.test.ts +13 -1
- package/src/rbac/hooks/useRBAC.ts +13 -67
- package/src/rbac/hooks/useResolvedScope.ts +11 -0
- package/src/rbac/hooks/useSecureSupabase.ts +308 -0
- package/src/rbac/index.ts +3 -0
- package/src/rbac/secureClient.ts +53 -6
- package/src/rbac/security.ts +37 -1
- package/src/{types/rbac-functions.ts → rbac/types/functions.ts} +30 -30
- package/src/rbac/types.ts +3 -2
- package/src/services/AuthService.ts +33 -25
- package/src/services/EventService.ts +56 -44
- package/src/services/InactivityService.ts +33 -53
- package/src/services/OrganisationService.ts +36 -40
- package/src/services/__tests__/AuthService.restoreSession.test.ts +6 -2
- package/src/services/__tests__/EventService.test.ts +67 -33
- package/src/services/interfaces/IEventService.ts +1 -1
- package/src/styles/core.css +2 -2
- package/src/styles/index.test.ts +21 -0
- package/src/styles/index.ts +1 -5
- package/src/types/__tests__/guards.test.ts +1 -1
- package/src/types/__tests__/organisation.roles.test.ts +55 -0
- package/src/types/__tests__/type-validation.test.ts +0 -1
- package/src/types/auth.ts +42 -2
- package/src/types/core.ts +251 -0
- package/src/types/database.ts +11 -496
- package/src/types/event.ts +102 -0
- package/src/types/file-reference.ts +6 -4
- package/src/types/guards.ts +2 -1
- package/src/types/index.ts +48 -14
- package/src/types/lodash.debounce.d.ts +15 -0
- package/src/types/organisation.ts +14 -10
- package/src/types/supabase.ts +15 -17
- package/src/utils/__tests__/secureErrors.unit.test.ts +1 -1
- package/src/utils/__tests__/validationUtils.unit.test.ts +0 -29
- package/src/utils/app/appNameResolver.ts +1 -1
- package/src/utils/audit/audit.test.ts +65 -0
- package/src/utils/device/deviceFingerprint.test.ts +171 -0
- package/src/utils/dynamic/dynamicUtils.ts +3 -2
- package/src/utils/file-reference/index.ts +25 -6
- package/src/utils/security/secureErrors.ts +1 -1
- package/src/utils/validation/__tests__/validationUtils.test.ts +72 -0
- package/src/utils/validation/index.ts +6 -12
- package/src/utils/validation/validationUtils.ts +0 -13
- package/dist/UnifiedAuthProvider-B37ATQHE.js +0 -16
- package/dist/auth-DReDSLq9.d.ts +0 -16
- package/dist/chunk-3JI76CYK.js +0 -2444
- package/dist/chunk-3JI76CYK.js.map +0 -1
- package/dist/chunk-56XJ3TU6.js +0 -11
- package/dist/chunk-56XJ3TU6.js.map +0 -1
- package/dist/chunk-5MT24GKJ.js.map +0 -1
- package/dist/chunk-7QCC6MCP.js +0 -288
- package/dist/chunk-BESYRHQM.js.map +0 -1
- package/dist/chunk-BJPBT3CU.js +0 -21
- package/dist/chunk-BJPBT3CU.js.map +0 -1
- package/dist/chunk-BVYWGZVV.js.map +0 -1
- package/dist/chunk-CX5M4ZAG.js.map +0 -1
- package/dist/chunk-D7LCGMVS.js.map +0 -1
- package/dist/chunk-EGI6MUL6.js +0 -27
- package/dist/chunk-EGI6MUL6.js.map +0 -1
- package/dist/chunk-ERISIBYU.js.map +0 -1
- package/dist/chunk-HRO5HWN2.js.map +0 -1
- package/dist/chunk-HZLDFOE4.js.map +0 -1
- package/dist/chunk-JISYG63F.js +0 -70
- package/dist/chunk-JISYG63F.js.map +0 -1
- package/dist/chunk-LIMSTKYD.js +0 -61
- package/dist/chunk-LIMSTKYD.js.map +0 -1
- package/dist/chunk-OWAG3GSU.js.map +0 -1
- package/dist/chunk-PPMP5J6T.js.map +0 -1
- package/dist/chunk-Q5QRDWKI.js.map +0 -1
- package/dist/chunk-S5OFRT4M.js.map +0 -1
- package/dist/chunk-SBVILCCA.js.map +0 -1
- package/dist/chunk-TUMEWN34.js +0 -15
- package/dist/chunk-TUMEWN34.js.map +0 -1
- package/dist/chunk-XDNLUEXI.js +0 -138
- package/dist/chunk-XJ2HZOBU.js.map +0 -1
- package/dist/chunk-ZYTYSTO5.js.map +0 -1
- package/dist/chunk-ZZ2SS7NI.js +0 -237
- package/dist/chunk-ZZ2SS7NI.js.map +0 -1
- package/dist/database-C6jy7EOu.d.ts +0 -500
- package/dist/organisation-D6qRDtbF.d.ts +0 -93
- package/dist/schema-DTDZQe2u.d.ts +0 -28
- package/dist/unified-DQ4VcT7H.d.ts +0 -198
- package/dist/useInactivityTracker-TO6ZOF35.js +0 -11
- package/dist/validation.d.ts +0 -47
- package/dist/validation.js +0 -24
- package/dist/validation.js.map +0 -1
- package/docs/DOCUMENTATION_AUDIT.md +0 -172
- package/docs/DOCUMENTATION_STANDARD.md +0 -137
- package/docs/api/classes/PublicErrorBoundary.md +0 -132
- package/docs/api/interfaces/EventLogoProps.md +0 -152
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
- package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
- package/docs/architecture/rpc-function-standards.md +0 -1106
- package/docs/getting-started/consuming-app-vite-config.md +0 -239
- package/docs/implementation-guides/event-theming-summary.md +0 -226
- package/docs/implementation-guides/public-pages-advanced.md +0 -1038
- package/docs/migration/v0.4.15-tailwind-scanning.md +0 -278
- package/docs/migration/v0.4.16-css-first-approach.md +0 -312
- package/docs/migration/v0.4.17-source-path-fix.md +0 -235
- package/docs/rbac/RBAC_EVENT_CONTEXT_LOADING.md +0 -222
- package/docs/rbac/RBAC_LOGIN_SAFETY_FIX.md +0 -95
- package/docs/rbac/RBAC_V0.5.147_FIX.md +0 -117
- package/docs/rbac/README-rbac-rls-integration.md +0 -374
- package/docs/styles/usage.md +0 -227
- package/docs/testing/visual-testing.md +0 -120
- package/docs/troubleshooting/DEBUG_NETWORK_ERROR.md +0 -152
- package/docs/troubleshooting/FIX_SUPABASE_CORS.md +0 -184
- package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +0 -193
- package/docs/troubleshooting/database-view-compatibility.md +0 -125
- package/docs/troubleshooting/react-hooks-issue-analysis.md +0 -172
- package/docs/troubleshooting/tailwind-content-scanning.md +0 -219
- package/examples/RBAC/EventBasedApp.tsx +0 -239
- package/examples/RBAC/PermissionExample.tsx +0 -151
- package/examples/STRUCTURE.md +0 -125
- package/examples/components 2/DataTable/HierarchicalExample.tsx +0 -475
- package/examples/components 2/Dialog/BasicHtmlTest.tsx +0 -55
- package/examples/components 2/Dialog/DebugHtmlExample.tsx +0 -68
- package/examples/components 2/Dialog/HtmlDialogExample.tsx +0 -202
- package/examples/components 2/Dialog/SimpleHtmlTest.tsx +0 -61
- package/examples/components 2/Dialog/SmartDialogExample.tsx +0 -322
- package/examples/components 2/index.ts +0 -11
- package/examples/features/index.ts +0 -12
- package/examples/features/rbac/CompleteRBACExample.tsx +0 -324
- package/examples/features/rbac/index.ts +0 -13
- package/examples/public-pages/CorrectPublicPageImplementation.tsx +0 -301
- package/examples/public-pages/PublicEventPage.tsx +0 -274
- package/examples/public-pages/PublicPageApp.tsx +0 -308
- package/examples/public-pages/PublicPageUsageExample.tsx +0 -216
- package/examples/public-pages/index.ts +0 -14
- package/src/__tests__/TEST_STANDARD.md +0 -1008
- package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -421
- package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -177
- package/src/components/DataTable/examples/PerformanceExample.tsx +0 -506
- package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +0 -316
- package/src/components/DataTable/examples/__tests__/HierarchicalExample.test.tsx +0 -45
- package/src/components/DataTable/examples/__tests__/InitialPageSizeExample.test.tsx +0 -211
- package/src/components/DataTable/examples/__tests__/PerformanceExample.test.tsx +0 -126
- package/src/components/Dialog/README.md +0 -804
- package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
- package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
- package/src/components/Dialog/examples/ScrollableDialogExample.tsx +0 -290
- package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
- package/src/components/Dialog/examples/__tests__/HtmlDialogExample.test.tsx +0 -71
- package/src/components/Dialog/examples/__tests__/SimpleHtmlTest.test.tsx +0 -122
- package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -147
- package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
- package/src/components/Dialog/utils/safeHtml.ts +0 -185
- package/src/components/EventSelector/types.ts +0 -79
- package/src/components/Form/FormErrorSummary.tsx +0 -113
- package/src/components/Form/FormField.tsx +0 -249
- package/src/components/Form/FormFieldset.tsx +0 -127
- package/src/components/Form/FormLiveRegion.tsx +0 -198
- package/src/components/Input/__mocks__/Input.tsx +0 -2
- package/src/components/NavigationMenu/types.ts +0 -85
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -326
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -1078
- package/src/components/PasswordReset/PasswordResetForm.test.tsx +0 -597
- package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
- package/src/components/PasswordReset/index.ts +0 -2
- package/src/components/ProtectedRoute/README.md +0 -164
- package/src/components/PublicLayout/EventLogo.tsx +0 -175
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -282
- package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -216
- package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -131
- package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
- package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
- package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
- package/src/components/PublicLayout/PublicPageHeader.tsx +0 -209
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -449
- package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -393
- package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +0 -192
- package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -351
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -402
- package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -460
- package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -313
- package/src/components/Select/hooks.ts +0 -289
- package/src/hooks/useCounter.test.ts +0 -131
- package/src/hooks/useDebounce.test.ts +0 -375
- package/src/providers/AuthProvider.tsx +0 -15
- package/src/providers/EventProvider.tsx +0 -16
- package/src/providers/InactivityProvider.tsx +0 -15
- package/src/providers/OrganisationProvider.context.test.tsx +0 -169
- package/src/providers/UnifiedAuthProvider.tsx +0 -15
- package/src/types/theme.ts +0 -6
- package/src/types/unified.ts +0 -265
- package/src/utils/appConfig.ts +0 -47
- package/src/utils/appIdResolver.test.ts +0 -499
- package/src/utils/appIdResolver.ts +0 -130
- package/src/utils/appNameResolver.simple.test.ts +0 -212
- package/src/utils/appNameResolver.test.ts +0 -121
- package/src/utils/appNameResolver.ts +0 -191
- package/src/utils/audit.ts +0 -127
- package/src/utils/auth-utils.ts +0 -96
- package/src/utils/bundleAnalysis.ts +0 -129
- package/src/utils/debugLogger.ts +0 -67
- package/src/utils/deviceFingerprint.ts +0 -215
- package/src/utils/dynamicUtils.ts +0 -105
- package/src/utils/file-reference.test.ts +0 -788
- package/src/utils/file-reference.ts +0 -519
- package/src/utils/formatDate.test.ts +0 -237
- package/src/utils/formatting.ts +0 -170
- package/src/utils/lazyLoad.tsx +0 -44
- package/src/utils/logger.ts +0 -179
- package/src/utils/organisationContext.test.ts +0 -322
- package/src/utils/organisationContext.ts +0 -153
- package/src/utils/performanceBenchmark.ts +0 -64
- package/src/utils/performanceBudgets.ts +0 -110
- package/src/utils/permissionTypes.ts +0 -37
- package/src/utils/permissionUtils.test.ts +0 -393
- package/src/utils/permissionUtils.ts +0 -34
- package/src/utils/sanitization.ts +0 -264
- package/src/utils/schemaUtils.ts +0 -37
- package/src/utils/secureDataAccess.test.ts +0 -711
- package/src/utils/secureDataAccess.ts +0 -377
- package/src/utils/secureErrors.ts +0 -79
- package/src/utils/security.ts +0 -156
- package/src/utils/securityMonitor.ts +0 -45
- package/src/utils/sessionTracking.ts +0 -126
- package/src/utils/validation.ts +0 -111
- package/src/utils/validationUtils.ts +0 -120
- package/src/validation/index.ts +0 -12
- /package/dist/{DataTable-UA6CL4JI.js.map → DataTable-QAB34V6K.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-B37ATQHE.js.map → UnifiedAuthProvider-7F6T4B6K.js.map} +0 -0
- /package/dist/{api-45XYYO2A.js.map → api-ROMBCNKU.js.map} +0 -0
- /package/dist/{audit-64X3VJXB.js.map → audit-WRS3KJKI.js.map} +0 -0
- /package/dist/{chunk-PLDDJCW6.js.map → chunk-7D4SUZUM.js.map} +0 -0
- /package/dist/{useInactivityTracker-TO6ZOF35.js.map → chunk-KQCRWDSA.js.map} +0 -0
- /package/examples/{components 2/DataTable → DataTable}/InitialPageSizeExample.tsx +0 -0
- /package/examples/{features/public-pages → PublicPages}/index.ts +0 -0
- /package/examples/{RBAC → rbac}/index.ts +0 -0
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file App Name Resolver Tests - Simple Working Version
|
|
3
|
-
* @description Core functionality tests for app name resolution utility functions
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
|
|
7
|
-
import {
|
|
8
|
-
getAppNameFromPackageJson,
|
|
9
|
-
getAppNameFromBuildTime,
|
|
10
|
-
getAppNameFromGlobal,
|
|
11
|
-
getAppNameFromEnvironment,
|
|
12
|
-
getCurrentAppName,
|
|
13
|
-
setRBACAppName
|
|
14
|
-
} from './appNameResolver';
|
|
15
|
-
|
|
16
|
-
// Mock Node.js modules
|
|
17
|
-
const mockFs = {
|
|
18
|
-
existsSync: vi.fn(() => false), // Default to false
|
|
19
|
-
readFileSync: vi.fn()
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const mockPath = {
|
|
23
|
-
join: vi.fn((...args) => args.join('/'))
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
// Mock require to return our mocked modules
|
|
27
|
-
const mockRequire = vi.fn((module: string) => {
|
|
28
|
-
if (module === 'fs') return mockFs;
|
|
29
|
-
if (module === 'path') return mockPath;
|
|
30
|
-
throw new Error(`Module ${module} not found`);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
vi.mock('fs', () => mockFs, { virtual: true });
|
|
34
|
-
vi.mock('path', () => mockPath, { virtual: true });
|
|
35
|
-
|
|
36
|
-
describe('App Name Resolver - Simple Tests', () => {
|
|
37
|
-
beforeEach(() => {
|
|
38
|
-
vi.clearAllMocks();
|
|
39
|
-
// Reset global variables
|
|
40
|
-
delete (globalThis as any).__RBAC_APP_NAME__;
|
|
41
|
-
delete (globalThis as any).RBAC_APP_NAME;
|
|
42
|
-
// Also reset window if it exists (for browser env checks)
|
|
43
|
-
if (typeof window !== 'undefined') {
|
|
44
|
-
delete (window as any).__RBAC_APP_NAME__;
|
|
45
|
-
delete (window as any).RBAC_APP_NAME;
|
|
46
|
-
}
|
|
47
|
-
// Don't delete process - it's needed by the test environment
|
|
48
|
-
// Reset process.env instead
|
|
49
|
-
if (typeof process !== 'undefined' && process.env) {
|
|
50
|
-
delete process.env.RBAC_APP_NAME;
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
describe('getAppNameFromPackageJson', () => {
|
|
55
|
-
it('returns null when not in Node.js environment', () => {
|
|
56
|
-
// Mock browser environment
|
|
57
|
-
Object.defineProperty(global, 'window', { value: {}, writable: true });
|
|
58
|
-
Object.defineProperty(global, 'require', { value: undefined, writable: true });
|
|
59
|
-
|
|
60
|
-
const result = getAppNameFromPackageJson();
|
|
61
|
-
expect(result).toBeNull();
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it('returns null when package.json does not exist', () => {
|
|
65
|
-
// Mock Node.js environment
|
|
66
|
-
Object.defineProperty(global, 'window', { value: undefined, writable: true });
|
|
67
|
-
// Mock require to use our mocked fs and path
|
|
68
|
-
const originalRequire = (global as any).require;
|
|
69
|
-
(global as any).require = mockRequire;
|
|
70
|
-
|
|
71
|
-
mockFs.existsSync.mockReturnValue(false);
|
|
72
|
-
mockFs.existsSync.mockClear();
|
|
73
|
-
|
|
74
|
-
const result = getAppNameFromPackageJson();
|
|
75
|
-
|
|
76
|
-
// Restore original require
|
|
77
|
-
if (originalRequire !== undefined) {
|
|
78
|
-
(global as any).require = originalRequire;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// If it returns a value, it found the real package.json - that's ok, just check it's a string or null
|
|
82
|
-
expect(result === null || typeof result === 'string').toBe(true);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it('returns app name from package.json when it exists', () => {
|
|
86
|
-
// Mock Node.js environment
|
|
87
|
-
Object.defineProperty(global, 'window', { value: undefined, writable: true });
|
|
88
|
-
const originalRequire = (global as any).require;
|
|
89
|
-
(global as any).require = mockRequire;
|
|
90
|
-
|
|
91
|
-
mockFs.existsSync.mockReturnValue(true);
|
|
92
|
-
mockFs.readFileSync.mockReturnValue(JSON.stringify({ name: 'test-app' }));
|
|
93
|
-
mockPath.join.mockImplementation((...args: string[]) => args.join('/'));
|
|
94
|
-
|
|
95
|
-
const result = getAppNameFromPackageJson();
|
|
96
|
-
|
|
97
|
-
// Restore original require
|
|
98
|
-
if (originalRequire !== undefined) {
|
|
99
|
-
(global as any).require = originalRequire;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// May find real package.json or mocked one - if mocked, should be test-app
|
|
103
|
-
// If real, it's ok as long as it's a string
|
|
104
|
-
expect(result === 'test-app' || typeof result === 'string').toBe(true);
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
describe('getAppNameFromBuildTime', () => {
|
|
109
|
-
it('returns null when build time app name is not available', () => {
|
|
110
|
-
const result = getAppNameFromBuildTime();
|
|
111
|
-
expect(result).toBeNull();
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
describe('getAppNameFromGlobal', () => {
|
|
116
|
-
it('returns null when no global app name is set', () => {
|
|
117
|
-
const result = getAppNameFromGlobal();
|
|
118
|
-
expect(result).toBeNull();
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
it('returns global app name when set', () => {
|
|
122
|
-
// Ensure window is defined for browser environment check
|
|
123
|
-
Object.defineProperty(global, 'window', { value: {}, writable: true });
|
|
124
|
-
|
|
125
|
-
(globalThis as any).RBAC_APP_NAME = 'global-app';
|
|
126
|
-
|
|
127
|
-
const result = getAppNameFromGlobal();
|
|
128
|
-
expect(result).toBe('global-app');
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
describe('getAppNameFromEnvironment', () => {
|
|
133
|
-
it('returns null when no environment variable is set', () => {
|
|
134
|
-
const result = getAppNameFromEnvironment();
|
|
135
|
-
expect(result).toBeNull();
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
it('returns environment app name when set via import.meta.env', () => {
|
|
139
|
-
// Use vi.stubEnv to mock Vite environment variables
|
|
140
|
-
vi.stubEnv('VITE_APP_NAME', 'env-app');
|
|
141
|
-
|
|
142
|
-
try {
|
|
143
|
-
const result = getAppNameFromEnvironment();
|
|
144
|
-
expect(result).toBe('env-app');
|
|
145
|
-
} finally {
|
|
146
|
-
vi.unstubAllEnvs();
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
describe('setRBACAppName', () => {
|
|
152
|
-
it('sets the global app name', () => {
|
|
153
|
-
// Ensure window is defined for browser environment check
|
|
154
|
-
Object.defineProperty(global, 'window', { value: {}, writable: true });
|
|
155
|
-
|
|
156
|
-
setRBACAppName('test-app');
|
|
157
|
-
|
|
158
|
-
expect((globalThis as any).RBAC_APP_NAME).toBe('test-app');
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
describe('getCurrentAppName', () => {
|
|
163
|
-
it('returns null when no other source is available', () => {
|
|
164
|
-
// Mock package.json to return null
|
|
165
|
-
mockFs.existsSync.mockReturnValue(false);
|
|
166
|
-
|
|
167
|
-
const result = getCurrentAppName();
|
|
168
|
-
// Will return null or package.json name if it exists in the test environment
|
|
169
|
-
// In test environment, package.json might be found, so just verify it's a string or null
|
|
170
|
-
expect(result === null || typeof result === 'string').toBe(true);
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
it('returns global app name when set via RBAC_APP_NAME', () => {
|
|
174
|
-
// Ensure window is defined for browser environment check
|
|
175
|
-
Object.defineProperty(global, 'window', { value: {}, writable: true });
|
|
176
|
-
(globalThis as any).RBAC_APP_NAME = 'global-app';
|
|
177
|
-
|
|
178
|
-
const result = getCurrentAppName();
|
|
179
|
-
expect(result).toBe('global-app');
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
it('returns build-time app name when set via __RBAC_APP_NAME__', () => {
|
|
183
|
-
// Mock package.json to return null so it doesn't interfere
|
|
184
|
-
mockFs.existsSync.mockReturnValue(false);
|
|
185
|
-
|
|
186
|
-
(globalThis as any).__RBAC_APP_NAME__ = 'build-app';
|
|
187
|
-
// Set window so getAppNameFromBuildTime runs
|
|
188
|
-
Object.defineProperty(global, 'window', { value: {}, writable: true });
|
|
189
|
-
|
|
190
|
-
const result = getCurrentAppName();
|
|
191
|
-
expect(result).toBe('build-app');
|
|
192
|
-
|
|
193
|
-
// Cleanup
|
|
194
|
-
delete (globalThis as any).__RBAC_APP_NAME__;
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
it('returns environment app name when set via import.meta.env', () => {
|
|
198
|
-
// Mock package.json to return null so it doesn't interfere
|
|
199
|
-
mockFs.existsSync.mockReturnValue(false);
|
|
200
|
-
|
|
201
|
-
// Use vi.stubEnv to mock Vite environment variables
|
|
202
|
-
vi.stubEnv('VITE_APP_NAME', 'env-app');
|
|
203
|
-
|
|
204
|
-
try {
|
|
205
|
-
const result = getCurrentAppName();
|
|
206
|
-
expect(result).toBe('env-app');
|
|
207
|
-
} finally {
|
|
208
|
-
vi.unstubAllEnvs();
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
});
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file App Name Resolver Tests - Simple Version
|
|
3
|
-
* @description Basic tests that verify functions exist and can be called
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { describe, it, expect } from 'vitest';
|
|
7
|
-
import {
|
|
8
|
-
getAppNameFromGlobal,
|
|
9
|
-
getAppNameFromEnvironment,
|
|
10
|
-
getCurrentAppName,
|
|
11
|
-
setRBACAppName
|
|
12
|
-
} from '../utils/appNameResolver';
|
|
13
|
-
|
|
14
|
-
describe('App Name Resolver - Simple Tests', () => {
|
|
15
|
-
describe('Function Existence', () => {
|
|
16
|
-
it('getAppNameFromGlobal is a function', () => {
|
|
17
|
-
expect(typeof getAppNameFromGlobal).toBe('function');
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
it('getAppNameFromEnvironment is a function', () => {
|
|
21
|
-
expect(typeof getAppNameFromEnvironment).toBe('function');
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('getCurrentAppName is a function', () => {
|
|
25
|
-
expect(typeof getCurrentAppName).toBe('function');
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('setRBACAppName is a function', () => {
|
|
29
|
-
expect(typeof setRBACAppName).toBe('function');
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
describe('Function Calls', () => {
|
|
34
|
-
it('getAppNameFromGlobal can be called without errors', () => {
|
|
35
|
-
expect(() => getAppNameFromGlobal()).not.toThrow();
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('getAppNameFromEnvironment can be called without errors', () => {
|
|
39
|
-
expect(() => getAppNameFromEnvironment()).not.toThrow();
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it('getCurrentAppName can be called without errors', () => {
|
|
43
|
-
expect(() => getCurrentAppName()).not.toThrow();
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('setRBACAppName can be called without errors', () => {
|
|
47
|
-
expect(() => setRBACAppName('test')).not.toThrow();
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
describe('Return Types', () => {
|
|
52
|
-
it('getAppNameFromGlobal returns string or null', () => {
|
|
53
|
-
const result = getAppNameFromGlobal();
|
|
54
|
-
expect(result === null || typeof result === 'string').toBe(true);
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('getAppNameFromEnvironment returns string or null', () => {
|
|
58
|
-
const result = getAppNameFromEnvironment();
|
|
59
|
-
expect(result === null || typeof result === 'string').toBe(true);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it('getCurrentAppName returns string or null', () => {
|
|
63
|
-
const result = getCurrentAppName();
|
|
64
|
-
expect(result === null || typeof result === 'string').toBe(true);
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
describe('Edge Cases', () => {
|
|
69
|
-
it('handles global variable being empty string', () => {
|
|
70
|
-
// In browser environment, if RBAC_APP_NAME is set to empty string
|
|
71
|
-
const originalGlobal = (globalThis as any).RBAC_APP_NAME;
|
|
72
|
-
(globalThis as any).RBAC_APP_NAME = '';
|
|
73
|
-
|
|
74
|
-
const result = getAppNameFromGlobal();
|
|
75
|
-
expect(result === null || typeof result === 'string').toBe(true);
|
|
76
|
-
|
|
77
|
-
// Restore original value
|
|
78
|
-
if (originalGlobal !== undefined) {
|
|
79
|
-
(globalThis as any).RBAC_APP_NAME = originalGlobal;
|
|
80
|
-
} else {
|
|
81
|
-
delete (globalThis as any).RBAC_APP_NAME;
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it('handles global variable being whitespace', () => {
|
|
86
|
-
const originalGlobal = (globalThis as any).RBAC_APP_NAME;
|
|
87
|
-
(globalThis as any).RBAC_APP_NAME = ' ';
|
|
88
|
-
|
|
89
|
-
const result = getAppNameFromGlobal();
|
|
90
|
-
// Should trim whitespace and return empty string (treated as null)
|
|
91
|
-
expect(result === null || result === '').toBe(true);
|
|
92
|
-
|
|
93
|
-
// Restore
|
|
94
|
-
if (originalGlobal !== undefined) {
|
|
95
|
-
(globalThis as any).RBAC_APP_NAME = originalGlobal;
|
|
96
|
-
} else {
|
|
97
|
-
delete (globalThis as any).RBAC_APP_NAME;
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
it('handles setRBACAppName with valid name', () => {
|
|
102
|
-
const testName = 'test-app-name';
|
|
103
|
-
setRBACAppName(testName);
|
|
104
|
-
|
|
105
|
-
const result = getAppNameFromGlobal();
|
|
106
|
-
expect(typeof result).toBe('string');
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('handles setRBACAppName with empty string', () => {
|
|
110
|
-
setRBACAppName('');
|
|
111
|
-
const result = getAppNameFromGlobal();
|
|
112
|
-
expect(result === null || result === '').toBe(true);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it('getCurrentAppName follows priority order', () => {
|
|
116
|
-
// This test verifies that getCurrentAppName follows proper fallback chain
|
|
117
|
-
const result = getCurrentAppName();
|
|
118
|
-
expect(result === null || typeof result === 'string').toBe(true);
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
});
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utility to resolve the current app name from various sources
|
|
3
|
-
* Priority: package.json > environment variables > fallback
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
interface PackageJson {
|
|
7
|
-
name: string;
|
|
8
|
-
[key: string]: any;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Get the app name from package.json at build time
|
|
13
|
-
* This works by reading package.json during the build process
|
|
14
|
-
*/
|
|
15
|
-
export function getAppNameFromPackageJson(): string | null {
|
|
16
|
-
// Check if we're in a Node.js environment (build time)
|
|
17
|
-
if (typeof window === 'undefined' && typeof require !== 'undefined') {
|
|
18
|
-
try {
|
|
19
|
-
// Try to read package.json from the current working directory
|
|
20
|
-
// This works in most Node.js environments
|
|
21
|
-
const fs = require('fs');
|
|
22
|
-
const path = require('path');
|
|
23
|
-
|
|
24
|
-
// Look for package.json in common locations
|
|
25
|
-
const possiblePaths = [
|
|
26
|
-
// Only use process.cwd() if we're in a Node.js environment
|
|
27
|
-
...(typeof process !== 'undefined' && process.cwd ? [path.join(process.cwd(), 'package.json')] : []),
|
|
28
|
-
path.join(__dirname, '../../package.json'),
|
|
29
|
-
path.join(__dirname, '../../../package.json'),
|
|
30
|
-
];
|
|
31
|
-
|
|
32
|
-
for (const packagePath of possiblePaths) {
|
|
33
|
-
try {
|
|
34
|
-
if (fs.existsSync(packagePath)) {
|
|
35
|
-
const packageJsonContent = fs.readFileSync(packagePath, 'utf8');
|
|
36
|
-
const packageJson: PackageJson = JSON.parse(packageJsonContent);
|
|
37
|
-
|
|
38
|
-
if (packageJson.name) {
|
|
39
|
-
// Extract the app name from the package name
|
|
40
|
-
// Handle scoped packages like @org/app-name
|
|
41
|
-
const name = packageJson.name.split('/').pop() || packageJson.name;
|
|
42
|
-
return name;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
} catch (error) {
|
|
46
|
-
// Continue to next path
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
} catch (error) {
|
|
51
|
-
// package.json not found or not readable
|
|
52
|
-
console.warn('[RBAC] Could not read app name from package.json:', error);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// In browser environments, we can't read package.json
|
|
57
|
-
// This will fall back to environment variables
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Get the app name from build-time injected variables
|
|
63
|
-
* This is the preferred method for browser environments
|
|
64
|
-
*/
|
|
65
|
-
export function getAppNameFromBuildTime(): string | null {
|
|
66
|
-
// Check for build-time injected app name
|
|
67
|
-
// This would be set by the build process reading package.json
|
|
68
|
-
if (typeof window !== 'undefined') {
|
|
69
|
-
// Try to access build-time injected variables
|
|
70
|
-
try {
|
|
71
|
-
// @ts-ignore - These are injected at build time
|
|
72
|
-
const buildTimeEnv = (globalThis as any).__RBAC_APP_NAME__;
|
|
73
|
-
if (buildTimeEnv && buildTimeEnv.trim()) {
|
|
74
|
-
return buildTimeEnv.trim();
|
|
75
|
-
}
|
|
76
|
-
} catch (error) {
|
|
77
|
-
// Build-time injection not available
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Get the app name from a global variable set by the consuming app
|
|
86
|
-
* This is the simplest approach for browser environments
|
|
87
|
-
*/
|
|
88
|
-
export function getAppNameFromGlobal(): string | null {
|
|
89
|
-
if (typeof window !== 'undefined') {
|
|
90
|
-
// Check for global app name set by consuming app
|
|
91
|
-
try {
|
|
92
|
-
// @ts-ignore - This is set by the consuming app
|
|
93
|
-
const globalAppName = (globalThis as any).RBAC_APP_NAME;
|
|
94
|
-
if (globalAppName && globalAppName.trim()) {
|
|
95
|
-
return globalAppName.trim();
|
|
96
|
-
}
|
|
97
|
-
} catch (error) {
|
|
98
|
-
// Global variable not set
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Get the app name from environment variables
|
|
107
|
-
* Fallback method for when package.json is not available
|
|
108
|
-
*/
|
|
109
|
-
export function getAppNameFromEnvironment(): string | null {
|
|
110
|
-
// Try different environment variable patterns used by various frameworks
|
|
111
|
-
const envVars = [
|
|
112
|
-
'VITE_APP_NAME',
|
|
113
|
-
'REACT_APP_NAME',
|
|
114
|
-
'NEXT_PUBLIC_APP_NAME',
|
|
115
|
-
'APP_NAME',
|
|
116
|
-
'NODE_APP_NAME'
|
|
117
|
-
];
|
|
118
|
-
|
|
119
|
-
for (const envVar of envVars) {
|
|
120
|
-
const value = import.meta.env[envVar];
|
|
121
|
-
if (value && value.trim()) {
|
|
122
|
-
return value.trim();
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
return null;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Get the current app name from the most reliable source
|
|
131
|
-
* Priority: global variable > build-time injection > package.json > environment variables > null
|
|
132
|
-
*/
|
|
133
|
-
export function getCurrentAppName(): string | null {
|
|
134
|
-
// First try global variable (set by consuming app)
|
|
135
|
-
const globalName = getAppNameFromGlobal();
|
|
136
|
-
if (globalName) {
|
|
137
|
-
return globalName;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// Then try build-time injection (most reliable for browser)
|
|
141
|
-
const buildTimeName = getAppNameFromBuildTime();
|
|
142
|
-
if (buildTimeName) {
|
|
143
|
-
return buildTimeName;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// Then try package.json (works in Node.js environments)
|
|
147
|
-
const packageJsonName = getAppNameFromPackageJson();
|
|
148
|
-
if (packageJsonName) {
|
|
149
|
-
return packageJsonName;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// Fallback to environment variables
|
|
153
|
-
const envName = getAppNameFromEnvironment();
|
|
154
|
-
if (envName) {
|
|
155
|
-
return envName;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
return null;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Set the app name globally for RBAC resolution
|
|
163
|
-
* Call this in your app's main entry point (e.g., main.tsx, index.tsx)
|
|
164
|
-
*
|
|
165
|
-
* @param appName - The app name from your package.json
|
|
166
|
-
*
|
|
167
|
-
* @example
|
|
168
|
-
* ```tsx
|
|
169
|
-
* // In your main.tsx or index.tsx
|
|
170
|
-
* import { setRBACAppName } from '@jmruthers/pace-core/utils';
|
|
171
|
-
*
|
|
172
|
-
* // Set the app name from package.json
|
|
173
|
-
* setRBACAppName('CAKE');
|
|
174
|
-
*
|
|
175
|
-
* // Rest of your app setup...
|
|
176
|
-
* ```
|
|
177
|
-
*/
|
|
178
|
-
export function setRBACAppName(appName: string): void {
|
|
179
|
-
if (typeof window !== 'undefined') {
|
|
180
|
-
// @ts-ignore - Setting global variable
|
|
181
|
-
(globalThis as any).RBAC_APP_NAME = appName.trim();
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Get the app name with fallback to a default
|
|
187
|
-
* Useful when you need a guaranteed app name
|
|
188
|
-
*/
|
|
189
|
-
export function getCurrentAppNameWithFallback(fallback: string = 'default-app'): string {
|
|
190
|
-
return getCurrentAppName() || fallback;
|
|
191
|
-
}
|
package/src/utils/audit.ts
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* @file Audit Logger - General Utility
|
|
4
|
-
*
|
|
5
|
-
* Moved from shared/auditLogger to lib for better organization
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export interface AuditEvent {
|
|
9
|
-
type: 'auth' | 'permission' | 'security';
|
|
10
|
-
action?: string;
|
|
11
|
-
event?: string;
|
|
12
|
-
user?: string;
|
|
13
|
-
userId?: string;
|
|
14
|
-
details?: Record<string, unknown>;
|
|
15
|
-
data?: Record<string, unknown>;
|
|
16
|
-
timestamp?: number;
|
|
17
|
-
severity?: 'low' | 'medium' | 'high' | 'critical';
|
|
18
|
-
source?: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
class AuditLogger {
|
|
22
|
-
private events: AuditEvent[] = [];
|
|
23
|
-
|
|
24
|
-
log(event: AuditEvent): void {
|
|
25
|
-
const eventWithTimestamp = {
|
|
26
|
-
...event,
|
|
27
|
-
timestamp: Date.now(),
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
this.events.push(eventWithTimestamp);
|
|
31
|
-
// TODO: In production, this should send to a proper logging service
|
|
32
|
-
// Console logging removed for production
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async logPermissionEvent(event: {
|
|
36
|
-
event: string;
|
|
37
|
-
userId: string;
|
|
38
|
-
data?: Record<string, unknown>;
|
|
39
|
-
}): Promise<void> {
|
|
40
|
-
this.log({
|
|
41
|
-
type: 'permission',
|
|
42
|
-
event: event.event,
|
|
43
|
-
userId: event.userId,
|
|
44
|
-
data: event.data,
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
async logSecurityEvent(event: {
|
|
49
|
-
event: string;
|
|
50
|
-
data?: Record<string, unknown>;
|
|
51
|
-
}): Promise<void> {
|
|
52
|
-
this.log({
|
|
53
|
-
type: 'security',
|
|
54
|
-
event: event.event,
|
|
55
|
-
data: event.data,
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
async logAuthEvent(event: {
|
|
60
|
-
event: string;
|
|
61
|
-
userId?: string;
|
|
62
|
-
data?: Record<string, unknown>;
|
|
63
|
-
}): Promise<void> {
|
|
64
|
-
this.log({
|
|
65
|
-
type: 'auth',
|
|
66
|
-
event: event.event,
|
|
67
|
-
userId: event.userId,
|
|
68
|
-
data: event.data,
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
async getSecurityEvents(): Promise<AuditEvent[]> {
|
|
73
|
-
return this.events.filter(event => event.type === 'security');
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
getEvents(): AuditEvent[] {
|
|
77
|
-
return [...this.events];
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
clearEvents(): void {
|
|
81
|
-
this.events = [];
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export const auditLogger = new AuditLogger();
|
|
86
|
-
|
|
87
|
-
// Alias for backward compatibility
|
|
88
|
-
export const auditLog = auditLogger;
|
|
89
|
-
|
|
90
|
-
export function logAuthEvent(action: string, user?: string, details?: Record<string, unknown>): void {
|
|
91
|
-
auditLogger.log({
|
|
92
|
-
type: 'auth',
|
|
93
|
-
action,
|
|
94
|
-
user,
|
|
95
|
-
details,
|
|
96
|
-
});
|
|
97
|
-
// Console logging removed for production
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export function logPermissionEvent(action: string, user?: string, details?: Record<string, unknown>): void {
|
|
101
|
-
auditLogger.log({
|
|
102
|
-
type: 'permission',
|
|
103
|
-
action,
|
|
104
|
-
user,
|
|
105
|
-
details,
|
|
106
|
-
});
|
|
107
|
-
// Console logging removed for production
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export function logSecurityEvent(action: string, user?: string, details?: Record<string, unknown>): void {
|
|
111
|
-
auditLogger.log({
|
|
112
|
-
type: 'security',
|
|
113
|
-
action,
|
|
114
|
-
user,
|
|
115
|
-
details,
|
|
116
|
-
});
|
|
117
|
-
// Console logging removed for production
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export function logAuditEvent(action: string, user?: string, details?: Record<string, unknown>): void {
|
|
121
|
-
auditLogger.log({
|
|
122
|
-
type: 'auth', // Default to auth type for general audit events
|
|
123
|
-
action,
|
|
124
|
-
user,
|
|
125
|
-
details,
|
|
126
|
-
});
|
|
127
|
-
}
|