@jmruthers/pace-core 0.5.181 → 0.5.182

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.
Files changed (750) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +16 -2
  3. package/dist/{AuthService-DYuQPJj6.d.ts → AuthService-B-cd2MA4.d.ts} +9 -11
  4. package/dist/{DataTable-CWAZZcXC.d.ts → DataTable-Bz8ffqyA.d.ts} +1 -1
  5. package/dist/{DataTable-UA6CL4JI.js → DataTable-QAB34V6K.js} +14 -15
  6. package/dist/UnifiedAuthProvider-7F6T4B6K.js +13 -0
  7. package/dist/{UnifiedAuthProvider-DJxGTftH.d.ts → UnifiedAuthProvider-F86d7dSi.d.ts} +5 -6
  8. package/dist/{api-45XYYO2A.js → api-ROMBCNKU.js} +5 -5
  9. package/dist/{audit-64X3VJXB.js → audit-WRS3KJKI.js} +4 -4
  10. package/dist/auth-BZOJqrdd.d.ts +49 -0
  11. package/dist/{chunk-CX5M4ZAG.js → chunk-5DRSZLL2.js} +1 -1
  12. package/dist/chunk-5DRSZLL2.js.map +1 -0
  13. package/dist/{chunk-BESYRHQM.js → chunk-6C4YBBJM.js} +10 -7
  14. package/dist/chunk-6C4YBBJM.js.map +1 -0
  15. package/dist/{chunk-PLDDJCW6.js → chunk-7D4SUZUM.js} +2 -13
  16. package/dist/{chunk-HRO5HWN2.js → chunk-CSOFYHAG.js} +55 -162
  17. package/dist/chunk-CSOFYHAG.js.map +1 -0
  18. package/dist/{chunk-ANBQRTPX.js → chunk-E66EQZE6.js} +3 -5
  19. package/dist/{chunk-ANBQRTPX.js.map → chunk-E66EQZE6.js.map} +1 -1
  20. package/dist/{chunk-Q5QRDWKI.js → chunk-F2IMUDXZ.js} +4 -6
  21. package/dist/chunk-F2IMUDXZ.js.map +1 -0
  22. package/dist/{chunk-SBVILCCA.js → chunk-FSFQFJCU.js} +28 -6
  23. package/dist/chunk-FSFQFJCU.js.map +1 -0
  24. package/dist/chunk-FUEYYMX5.js +2296 -0
  25. package/dist/chunk-FUEYYMX5.js.map +1 -0
  26. package/dist/{chunk-FFKNH6U5.js → chunk-HKIT6O7W.js} +3 -5
  27. package/dist/{chunk-FFKNH6U5.js.map → chunk-HKIT6O7W.js.map} +1 -1
  28. package/dist/chunk-KQCRWDSA.js +1 -0
  29. package/dist/{chunk-S5OFRT4M.js → chunk-KUEN3HFB.js} +6 -6
  30. package/dist/chunk-KUEN3HFB.js.map +1 -0
  31. package/dist/chunk-LMC26NLJ.js +84 -0
  32. package/dist/chunk-LMC26NLJ.js.map +1 -0
  33. package/dist/{chunk-BVYWGZVV.js → chunk-M7W4CP3M.js} +52 -19
  34. package/dist/chunk-M7W4CP3M.js.map +1 -0
  35. package/dist/{chunk-HZLDFOE4.js → chunk-MI7HBHN3.js} +164 -243
  36. package/dist/chunk-MI7HBHN3.js.map +1 -0
  37. package/dist/{chunk-PPMP5J6T.js → chunk-PWAHJW4G.js} +180 -29
  38. package/dist/chunk-PWAHJW4G.js.map +1 -0
  39. package/dist/chunk-PWLANIRT.js +127 -0
  40. package/dist/{chunk-XDNLUEXI.js.map → chunk-PWLANIRT.js.map} +1 -1
  41. package/dist/chunk-QCDXODCA.js +75 -0
  42. package/dist/chunk-QCDXODCA.js.map +1 -0
  43. package/dist/{chunk-D7LCGMVS.js → chunk-QETLRQI6.js} +526 -887
  44. package/dist/chunk-QETLRQI6.js.map +1 -0
  45. package/dist/{chunk-5MT24GKJ.js → chunk-QUVSNGIP.js} +264 -262
  46. package/dist/chunk-QUVSNGIP.js.map +1 -0
  47. package/dist/chunk-QXHPKYJV.js +113 -0
  48. package/dist/chunk-QXHPKYJV.js.map +1 -0
  49. package/dist/{chunk-OWAG3GSU.js → chunk-R77UEZ4E.js} +11 -1
  50. package/dist/chunk-R77UEZ4E.js.map +1 -0
  51. package/dist/{chunk-ZYTYSTO5.js → chunk-RA3JUFMW.js} +314 -161
  52. package/dist/chunk-RA3JUFMW.js.map +1 -0
  53. package/dist/{chunk-ERISIBYU.js → chunk-SQGMNID3.js} +3 -8
  54. package/dist/chunk-SQGMNID3.js.map +1 -0
  55. package/dist/{chunk-XJ2HZOBU.js → chunk-UHNYIBXL.js} +1 -1
  56. package/dist/chunk-UHNYIBXL.js.map +1 -0
  57. package/{src/utils/secureStorage.ts → dist/chunk-VBXEHIUJ.js} +113 -88
  58. package/dist/{chunk-7QCC6MCP.js.map → chunk-VBXEHIUJ.js.map} +1 -1
  59. package/dist/{chunk-VZ4VDGTB.js → chunk-W22JP75J.js} +5 -13
  60. package/dist/{chunk-VZ4VDGTB.js.map → chunk-W22JP75J.js.map} +1 -1
  61. package/dist/components.d.ts +12 -93
  62. package/dist/components.js +23 -106
  63. package/dist/components.js.map +1 -1
  64. package/dist/core-CUElvH_C.d.ts +164 -0
  65. package/dist/database.generated-CBmg2950.d.ts +8284 -0
  66. package/dist/event-CW5YB_2p.d.ts +239 -0
  67. package/dist/{file-reference-C6Gkn77H.d.ts → file-reference-D06mEEWW.d.ts} +7 -5
  68. package/dist/functions-D_kgHktt.d.ts +208 -0
  69. package/dist/hooks.d.ts +54 -7
  70. package/dist/hooks.js +204 -17
  71. package/dist/hooks.js.map +1 -1
  72. package/dist/{EventLogo-B3V3otev.d.ts → index-Bl--n7-T.d.ts} +387 -397
  73. package/dist/index.d.ts +94 -261
  74. package/dist/index.js +314 -126
  75. package/dist/index.js.map +1 -1
  76. package/dist/providers.d.ts +7 -8
  77. package/dist/providers.js +6 -13
  78. package/dist/rbac/index.d.ts +171 -101
  79. package/dist/rbac/index.js +23 -17
  80. package/dist/styles/index.d.ts +1 -3
  81. package/dist/styles/index.js +2 -17
  82. package/dist/theming/runtime.js +3 -3
  83. package/dist/types-UU913iLA.d.ts +102 -0
  84. package/dist/{types-Dfz9dmVH.d.ts → types-_x1f4QBF.d.ts} +6 -6
  85. package/dist/types.d.ts +88 -227
  86. package/dist/types.js +64 -112
  87. package/dist/types.js.map +1 -1
  88. package/dist/{usePublicRouteParams-B7PabvuH.d.ts → usePublicRouteParams-JJczomYq.d.ts} +203 -6
  89. package/dist/utils.d.ts +299 -13
  90. package/dist/utils.js +481 -55
  91. package/dist/utils.js.map +1 -1
  92. package/dist/validation-643vUDZW.d.ts +177 -0
  93. package/docs/DOCUMENTATION_REVIEW_TRACKER.md +511 -0
  94. package/docs/README.md +9 -8
  95. package/docs/api/README.md +16 -2
  96. package/docs/api/classes/ColumnFactory.md +1 -1
  97. package/docs/api/classes/ErrorBoundary.md +1 -1
  98. package/docs/api/classes/InvalidScopeError.md +4 -4
  99. package/docs/api/classes/MissingUserContextError.md +4 -4
  100. package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
  101. package/docs/api/classes/PermissionDeniedError.md +4 -4
  102. package/docs/api/classes/RBACAuditManager.md +14 -14
  103. package/docs/api/classes/RBACCache.md +1 -1
  104. package/docs/api/classes/RBACEngine.md +2 -2
  105. package/docs/api/classes/RBACError.md +4 -4
  106. package/docs/api/classes/RBACNotInitializedError.md +4 -4
  107. package/docs/api/classes/SecureSupabaseClient.md +29 -9
  108. package/docs/api/classes/StorageUtils.md +1 -1
  109. package/docs/api/enums/FileCategory.md +17 -17
  110. package/docs/api/enums/RBACErrorCode.md +228 -0
  111. package/docs/api/enums/RPCFunction.md +118 -0
  112. package/docs/api/interfaces/AggregateConfig.md +1 -1
  113. package/docs/api/interfaces/BadgeProps.md +1 -1
  114. package/docs/api/interfaces/ButtonProps.md +2 -2
  115. package/docs/api/interfaces/CalendarProps.md +1 -1
  116. package/docs/api/interfaces/CardProps.md +29 -3
  117. package/docs/api/interfaces/ColorPalette.md +1 -1
  118. package/docs/api/interfaces/ColorShade.md +1 -1
  119. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  120. package/docs/api/interfaces/DataRecord.md +1 -1
  121. package/docs/api/interfaces/DataTableAction.md +2 -2
  122. package/docs/api/interfaces/DataTableColumn.md +6 -6
  123. package/docs/api/interfaces/DataTableProps.md +1 -1
  124. package/docs/api/interfaces/DataTableToolbarButton.md +2 -2
  125. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  126. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  127. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  128. package/docs/api/interfaces/ExportColumn.md +5 -5
  129. package/docs/api/interfaces/ExportOptions.md +4 -4
  130. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  131. package/docs/api/interfaces/FileMetadata.md +13 -13
  132. package/docs/api/interfaces/FileReference.md +12 -12
  133. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  134. package/docs/api/interfaces/FileUploadOptions.md +10 -10
  135. package/docs/api/interfaces/FileUploadProps.md +19 -19
  136. package/docs/api/interfaces/FooterProps.md +1 -1
  137. package/docs/api/interfaces/FormFieldProps.md +166 -0
  138. package/docs/api/interfaces/FormProps.md +113 -0
  139. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  140. package/docs/api/interfaces/InactivityWarningModalProps.md +8 -8
  141. package/docs/api/interfaces/InputProps.md +2 -2
  142. package/docs/api/interfaces/LabelProps.md +8 -8
  143. package/docs/api/interfaces/LoginFormProps.md +1 -1
  144. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  145. package/docs/api/interfaces/NavigationContextType.md +1 -1
  146. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  147. package/docs/api/interfaces/NavigationItem.md +17 -73
  148. package/docs/api/interfaces/NavigationMenuProps.md +38 -53
  149. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  150. package/docs/api/interfaces/Organisation.md +13 -13
  151. package/docs/api/interfaces/OrganisationContextType.md +21 -21
  152. package/docs/api/interfaces/OrganisationMembership.md +15 -15
  153. package/docs/api/interfaces/OrganisationProviderProps.md +59 -2
  154. package/docs/api/interfaces/OrganisationSecurityError.md +5 -5
  155. package/docs/api/interfaces/PaceAppLayoutProps.md +26 -39
  156. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  157. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  158. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  159. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  160. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  161. package/docs/api/interfaces/PaletteData.md +1 -1
  162. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  163. package/docs/api/interfaces/ProgressProps.md +50 -0
  164. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  165. package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
  166. package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
  167. package/docs/api/interfaces/PublicPageLayoutProps.md +15 -15
  168. package/docs/api/interfaces/RBACAccessValidateParams.md +52 -0
  169. package/docs/api/interfaces/RBACAccessValidateResult.md +41 -0
  170. package/docs/api/interfaces/RBACAuditLogParams.md +85 -0
  171. package/docs/api/interfaces/RBACAuditLogResult.md +52 -0
  172. package/docs/api/interfaces/RBACConfig.md +2 -2
  173. package/docs/api/interfaces/RBACContext.md +52 -0
  174. package/docs/api/interfaces/RBACLogger.md +1 -1
  175. package/docs/api/interfaces/RBACPageAccessCheckParams.md +74 -0
  176. package/docs/api/interfaces/RBACPermissionCheckParams.md +74 -0
  177. package/docs/api/interfaces/RBACPermissionCheckResult.md +52 -0
  178. package/docs/api/interfaces/RBACPermissionsGetParams.md +63 -0
  179. package/docs/api/interfaces/RBACPermissionsGetResult.md +63 -0
  180. package/docs/api/interfaces/RBACResult.md +58 -0
  181. package/docs/api/interfaces/RBACRoleGrantParams.md +63 -0
  182. package/docs/api/interfaces/RBACRoleGrantResult.md +52 -0
  183. package/docs/api/interfaces/RBACRoleRevokeParams.md +63 -0
  184. package/docs/api/interfaces/RBACRoleRevokeResult.md +52 -0
  185. package/docs/api/interfaces/RBACRoleValidateParams.md +52 -0
  186. package/docs/api/interfaces/RBACRoleValidateResult.md +63 -0
  187. package/docs/api/interfaces/RBACRolesListParams.md +52 -0
  188. package/docs/api/interfaces/RBACRolesListResult.md +74 -0
  189. package/docs/api/interfaces/RBACSessionTrackParams.md +74 -0
  190. package/docs/api/interfaces/RBACSessionTrackResult.md +52 -0
  191. package/docs/api/interfaces/ResourcePermissions.md +1 -1
  192. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  193. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  194. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  195. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  196. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  197. package/docs/api/interfaces/RouteConfig.md +1 -1
  198. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  199. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  200. package/docs/api/interfaces/SessionRestorationLoaderProps.md +15 -2
  201. package/docs/api/interfaces/StorageConfig.md +1 -1
  202. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  203. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  204. package/docs/api/interfaces/StorageListOptions.md +1 -1
  205. package/docs/api/interfaces/StorageListResult.md +1 -1
  206. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  207. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  208. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  209. package/docs/api/interfaces/StyleImport.md +1 -1
  210. package/docs/api/interfaces/SwitchProps.md +1 -1
  211. package/docs/api/interfaces/TabsContentProps.md +1 -1
  212. package/docs/api/interfaces/TabsListProps.md +1 -1
  213. package/docs/api/interfaces/TabsProps.md +1 -1
  214. package/docs/api/interfaces/TabsTriggerProps.md +43 -2
  215. package/docs/api/interfaces/TextareaProps.md +2 -2
  216. package/docs/api/interfaces/ToastActionElement.md +1 -1
  217. package/docs/api/interfaces/ToastProps.md +1 -1
  218. package/docs/api/interfaces/UnifiedAuthContextType.md +61 -61
  219. package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
  220. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  221. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  222. package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
  223. package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
  224. package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
  225. package/docs/api/interfaces/UsePublicEventReturn.md +5 -5
  226. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +2 -2
  227. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  228. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  229. package/docs/api/interfaces/UseResolvedScopeOptions.md +2 -2
  230. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  231. package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
  232. package/docs/api/interfaces/UserEventAccess.md +1 -1
  233. package/docs/api/interfaces/UserMenuProps.md +4 -4
  234. package/docs/api/interfaces/UserProfile.md +7 -7
  235. package/docs/api/modules.md +484 -462
  236. package/docs/api-reference/components.md +186 -15
  237. package/docs/api-reference/deprecated.md +376 -0
  238. package/docs/api-reference/hooks.md +149 -19
  239. package/docs/api-reference/providers.md +61 -6
  240. package/docs/api-reference/rpc-functions.md +397 -0
  241. package/docs/api-reference/types.md +135 -78
  242. package/docs/api-reference/utilities.md +51 -380
  243. package/docs/architecture/README.md +49 -3
  244. package/docs/architecture/database-schema-requirements.md +40 -3
  245. package/docs/architecture/rbac-security-architecture.md +41 -4
  246. package/docs/architecture/services.md +127 -42
  247. package/docs/best-practices/README.md +51 -5
  248. package/docs/best-practices/accessibility.md +32 -3
  249. package/docs/best-practices/common-patterns.md +50 -3
  250. package/docs/best-practices/deployment.md +50 -4
  251. package/docs/best-practices/performance.md +50 -3
  252. package/docs/best-practices/security.md +94 -41
  253. package/docs/best-practices/testing.md +33 -4
  254. package/docs/core-concepts/authentication.md +5 -5
  255. package/docs/core-concepts/events.md +3 -3
  256. package/docs/core-concepts/organisations.md +3 -3
  257. package/docs/core-concepts/permissions.md +3 -3
  258. package/docs/core-concepts/rbac-system.md +5 -5
  259. package/docs/documentation-index.md +30 -8
  260. package/docs/getting-started/documentation-index.md +1 -1
  261. package/docs/getting-started/examples/README.md +7 -5
  262. package/docs/getting-started/examples/basic-auth-app.md +3 -0
  263. package/docs/getting-started/examples/full-featured-app.md +5 -3
  264. package/docs/getting-started/faq.md +6 -6
  265. package/docs/getting-started/installation-guide.md +192 -13
  266. package/docs/getting-started/local-development.md +303 -0
  267. package/docs/getting-started/quick-reference.md +3 -3
  268. package/docs/getting-started/quick-start.md +517 -0
  269. package/docs/implementation-guides/app-layout.md +45 -3
  270. package/docs/implementation-guides/authentication.md +66 -7
  271. package/docs/implementation-guides/component-styling.md +53 -3
  272. package/docs/implementation-guides/data-tables.md +76 -7
  273. package/docs/implementation-guides/datatable-filtering.md +1 -2
  274. package/docs/implementation-guides/datatable-rbac-usage.md +0 -1
  275. package/docs/implementation-guides/dynamic-colors.md +155 -4
  276. package/docs/implementation-guides/file-reference-system.md +72 -3
  277. package/docs/implementation-guides/file-upload-storage.md +72 -3
  278. package/docs/implementation-guides/forms.md +53 -3
  279. package/docs/implementation-guides/inactivity-tracking.md +53 -3
  280. package/docs/implementation-guides/large-datasets.md +1 -1
  281. package/docs/implementation-guides/navigation.md +55 -5
  282. package/docs/implementation-guides/organisation-security.md +72 -3
  283. package/docs/implementation-guides/performance.md +57 -1
  284. package/docs/implementation-guides/permission-enforcement.md +81 -8
  285. package/docs/implementation-guides/public-pages.md +560 -14
  286. package/docs/migration/MIGRATION_GUIDE.md +409 -50
  287. package/docs/migration/README.md +37 -3
  288. package/docs/migration/organisation-context-timing-fix.md +39 -4
  289. package/docs/migration/quick-migration-guide.md +41 -5
  290. package/docs/migration/rbac-migration.md +59 -3
  291. package/docs/migration/service-architecture.md +77 -14
  292. package/docs/rbac/README.md +79 -3
  293. package/docs/rbac/advanced-patterns.md +47 -3
  294. package/docs/rbac/api-reference.md +77 -8
  295. package/docs/rbac/event-based-apps.md +50 -5
  296. package/docs/rbac/examples/rbac-rls-integration-example.md +3 -3
  297. package/docs/rbac/examples.md +39 -3
  298. package/docs/rbac/getting-started.md +63 -4
  299. package/docs/rbac/quick-start.md +57 -5
  300. package/docs/rbac/rbac-rls-integration.md +68 -6
  301. package/docs/rbac/super-admin-guide.md +47 -3
  302. package/docs/rbac/troubleshooting.md +3 -3
  303. package/docs/security/README.md +68 -3
  304. package/docs/security/checklist.md +50 -3
  305. package/docs/standards/01-architecture-standard.md +39 -0
  306. package/docs/standards/02-api-and-rpc-standard.md +39 -0
  307. package/docs/standards/03-component-standard.md +32 -0
  308. package/docs/standards/04-code-style-standard.md +32 -0
  309. package/docs/standards/05-security-standard.md +30 -0
  310. package/docs/standards/06-testing-and-docs-standard.md +29 -0
  311. package/docs/standards/README.md +35 -0
  312. package/docs/styles/README.md +89 -8
  313. package/docs/testing/README.md +175 -24
  314. package/docs/troubleshooting/README.md +50 -3
  315. package/docs/troubleshooting/common-issues.md +271 -5
  316. package/docs/troubleshooting/debugging.md +54 -1
  317. package/docs/troubleshooting/migration.md +54 -1
  318. package/docs/troubleshooting/organisation-context-setup.md +29 -3
  319. package/docs/troubleshooting/styling-issues.md +246 -4
  320. package/{src/components/DataTable/examples → examples/DataTable}/GroupingAggregationExample.tsx +1 -1
  321. package/examples/{components 2/DataTable/HierarchicalActionsExample.tsx → DataTable/HierarchicalActionsExample.tsx} +7 -6
  322. package/{src/components/DataTable/examples → examples/DataTable}/HierarchicalExample.tsx +8 -6
  323. package/examples/{components 2/DataTable/PerformanceExample.tsx → DataTable/PerformanceExample.tsx} +2 -2
  324. package/examples/{components 2/DataTable/index.ts → DataTable/index.ts} +1 -0
  325. package/{src/components/Dialog/examples → examples/Dialog}/HtmlDialogExample.tsx +3 -3
  326. package/examples/{components 2/Dialog/ScrollableDialogExample.tsx → Dialog/ScrollableDialogExample.tsx} +1 -1
  327. package/{src/components/Dialog/examples → examples/Dialog}/SmartDialogExample.tsx +1 -1
  328. package/examples/{components 2/Dialog/index.ts → Dialog/index.ts} +0 -3
  329. package/examples/{features/public-pages → PublicPages}/CorrectPublicPageImplementation.tsx +52 -17
  330. package/examples/{features/public-pages → PublicPages}/PublicEventPage.tsx +65 -35
  331. package/examples/{features/public-pages → PublicPages}/PublicPageApp.tsx +52 -18
  332. package/examples/{features/public-pages → PublicPages}/PublicPageUsageExample.tsx +28 -15
  333. package/examples/README.md +81 -33
  334. package/examples/index.ts +14 -12
  335. package/examples/{RBAC → rbac}/CompleteRBACExample.tsx +1 -1
  336. package/examples/{features/rbac → rbac}/EventBasedApp.tsx +4 -4
  337. package/examples/{features/rbac → rbac}/PermissionExample.tsx +5 -3
  338. package/package.json +21 -27
  339. package/src/__tests__/helpers/test-utils.tsx +29 -3
  340. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +7 -5
  341. package/src/components/Alert/Alert.test.tsx +2 -2
  342. package/src/components/Alert/Alert.tsx +4 -4
  343. package/src/components/Avatar/Avatar.test.tsx +17 -6
  344. package/src/components/Badge/Badge.test.tsx +1 -1
  345. package/src/components/Badge/Badge.tsx +2 -2
  346. package/src/components/Button/Button.test.tsx +2 -2
  347. package/src/components/Button/Button.tsx +11 -7
  348. package/src/components/Calendar/Calendar.test.tsx +41 -8
  349. package/src/components/Calendar/Calendar.tsx +39 -36
  350. package/src/components/Card/Card.tsx +51 -13
  351. package/src/components/Checkbox/Checkbox.test.tsx +36 -12
  352. package/src/components/DataTable/DataTable.test.tsx +1 -1
  353. package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +13 -7
  354. package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +14 -42
  355. package/src/components/DataTable/__tests__/DataTable.export.test.tsx +13 -10
  356. package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +14 -11
  357. package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +4 -2
  358. package/src/components/DataTable/__tests__/DataTable.test.tsx +13 -7
  359. package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +13 -10
  360. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +15 -11
  361. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +12 -6
  362. package/src/components/DataTable/__tests__/keyboard.test.tsx +12 -6
  363. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +10 -6
  364. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +1 -1
  365. package/src/components/DataTable/components/DataTableBody.tsx +10 -25
  366. package/src/components/DataTable/components/DataTableCore.tsx +1 -1
  367. package/src/components/DataTable/components/FilterRow.tsx +3 -1
  368. package/src/components/DataTable/components/ImportModal.tsx +1 -1
  369. package/src/components/DataTable/components/VirtualizedDataTable.tsx +9 -9
  370. package/src/components/DataTable/core/ColumnFactory.ts +6 -6
  371. package/src/components/DataTable/core/DataTableContext.tsx +14 -10
  372. package/src/components/DataTable/core/LocalDataAdapter.ts +2 -1
  373. package/src/components/DataTable/core/PluginRegistry.ts +3 -3
  374. package/src/components/DataTable/core/StateManager.ts +12 -11
  375. package/src/components/DataTable/core/__tests__/ActionManager.test.ts +104 -0
  376. package/src/components/DataTable/core/__tests__/DataManager.test.ts +101 -0
  377. package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +84 -0
  378. package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +102 -0
  379. package/src/components/DataTable/core/__tests__/StateManager.test.ts +104 -0
  380. package/src/components/DataTable/core/interfaces.ts +17 -17
  381. package/src/components/DataTable/hooks/__tests__/useDataTableConfiguration.test.ts +124 -0
  382. package/src/components/DataTable/hooks/__tests__/useDataTableDataPipeline.test.ts +117 -0
  383. package/src/components/DataTable/hooks/__tests__/useDataTablePermissions.test.ts +102 -0
  384. package/src/components/DataTable/hooks/__tests__/useEffectiveColumnOrder.test.ts +53 -0
  385. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +0 -2
  386. package/src/components/DataTable/hooks/useDataTablePermissions.ts +9 -8
  387. package/src/components/DataTable/types.ts +5 -5
  388. package/src/components/DataTable/utils/aggregationUtils.ts +4 -4
  389. package/src/components/DataTable/utils/columnUtils.ts +3 -2
  390. package/src/components/DataTable/utils/debugTools.ts +1 -1
  391. package/src/components/DataTable/utils/exportUtils.ts +6 -6
  392. package/src/components/DataTable/utils/hierarchicalSorting.ts +6 -6
  393. package/src/components/DataTable/utils/hierarchicalUtils.ts +0 -8
  394. package/src/components/DataTable/utils/index.ts +0 -1
  395. package/src/components/DataTable/utils/performanceUtils.ts +9 -4
  396. package/src/components/Dialog/Dialog.test.tsx +49 -27
  397. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +13 -8
  398. package/src/components/EventSelector/EventSelector.test.tsx +60 -12
  399. package/src/components/EventSelector/EventSelector.tsx +38 -15
  400. package/src/components/EventSelector/index.ts +2 -2
  401. package/src/components/FileDisplay/FileDisplay.test.tsx +143 -85
  402. package/src/components/FileDisplay/FileDisplay.tsx +1 -0
  403. package/src/components/FileUpload/FileUpload.test.tsx +532 -152
  404. package/src/components/FileUpload/FileUpload.tsx +43 -8
  405. package/src/components/Footer/Footer.test.tsx +19 -14
  406. package/src/components/Form/Form.test.tsx +96 -14
  407. package/src/components/Form/Form.tsx +210 -1
  408. package/src/components/Form/index.ts +3 -7
  409. package/src/components/Header/Header.test.tsx +24 -17
  410. package/src/components/Header/Header.tsx +3 -1
  411. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +2 -4
  412. package/src/components/Input/Input.test.tsx +61 -36
  413. package/src/components/Label/{__tests__/Label.test.tsx → Label.test.tsx} +2 -2
  414. package/src/components/Label/Label.tsx +2 -3
  415. package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +6 -5
  416. package/src/components/LoadingSpinner/LoadingSpinner.tsx +6 -2
  417. package/src/components/LoginForm/LoginForm.test.tsx +14 -13
  418. package/src/components/LoginForm/LoginForm.tsx +1 -1
  419. package/src/components/LoginForm/index.ts +7 -0
  420. package/src/components/NavigationMenu/NavigationMenu.test.tsx +233 -20
  421. package/src/components/NavigationMenu/NavigationMenu.tsx +191 -55
  422. package/src/components/NavigationMenu/index.ts +1 -1
  423. package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +20 -11
  424. package/src/components/OrganisationSelector/OrganisationSelector.tsx +1 -1
  425. package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.integration.test.tsx → PaceAppLayout.integration.test.tsx} +272 -79
  426. package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.performance.test.tsx → PaceAppLayout.performance.test.tsx} +155 -32
  427. package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.security.test.tsx → PaceAppLayout.security.test.tsx} +211 -65
  428. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +498 -210
  429. package/src/components/PaceAppLayout/PaceAppLayout.tsx +63 -64
  430. package/src/components/PaceAppLayout/test-setup.tsx +192 -0
  431. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +193 -39
  432. package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.test.tsx +2 -2
  433. package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.tsx +10 -4
  434. package/src/components/PasswordChange/index.ts +2 -0
  435. package/src/components/Progress/Progress.test.tsx +11 -0
  436. package/src/components/Progress/Progress.tsx +1 -1
  437. package/src/components/Progress/index.ts +10 -0
  438. package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +2 -1
  439. package/src/components/PublicLayout/PublicLayout.test.tsx +1210 -0
  440. package/src/components/PublicLayout/PublicPageLayout.tsx +190 -36
  441. package/src/components/PublicLayout/PublicPageProvider.tsx +8 -7
  442. package/src/components/PublicLayout/index.ts +10 -28
  443. package/src/components/Select/Select.test.tsx +7 -7
  444. package/src/components/Select/Select.tsx +277 -11
  445. package/src/components/Select/index.ts +1 -2
  446. package/src/components/SessionRestorationLoader/SessionRestorationLoader.test.tsx +232 -0
  447. package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +40 -19
  448. package/src/components/Table/{__tests__/Table.test.tsx → Table.test.tsx} +94 -41
  449. package/src/components/Tabs/Tabs.test.tsx +10 -9
  450. package/src/components/Tabs/Tabs.tsx +61 -33
  451. package/src/components/Textarea/Textarea.test.tsx +31 -18
  452. package/src/components/Toast/Toast.tsx +2 -2
  453. package/src/components/Tooltip/Tooltip.test.tsx +1 -1
  454. package/src/components/UserMenu/UserMenu.test.tsx +7 -6
  455. package/src/components/UserMenu/UserMenu.tsx +2 -2
  456. package/src/components/index.ts +5 -4
  457. package/src/constants/performance.ts +19 -8
  458. package/src/hooks/__tests__/useAppConfig.unit.test.ts +21 -22
  459. package/src/hooks/__tests__/useEvents.unit.test.ts +5 -4
  460. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +2 -2
  461. package/src/hooks/__tests__/usePermissionCache.simple.test.ts +17 -0
  462. package/src/hooks/__tests__/usePermissionCache.unit.test.ts +16 -11
  463. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +1 -3
  464. package/src/hooks/__tests__/usePublicEvent.unit.test.ts +1 -3
  465. package/src/hooks/__tests__/useRBAC.unit.test.ts +24 -2
  466. package/src/hooks/index.ts +4 -0
  467. package/src/hooks/public/index.ts +2 -0
  468. package/src/hooks/public/usePublicEvent.ts +4 -6
  469. package/src/hooks/public/usePublicRouteParams.ts +1 -1
  470. package/src/hooks/services/useAuth.ts +2 -4
  471. package/src/hooks/services/useCurrentEvent.ts +1 -1
  472. package/src/hooks/useAppConfig.ts +1 -1
  473. package/src/hooks/useDataTablePerformance.ts +2 -2
  474. package/src/hooks/useEventTheme.ts +1 -1
  475. package/src/hooks/useEvents.ts +51 -10
  476. package/src/hooks/useOrganisationPermissions.test.ts +3 -3
  477. package/src/hooks/useOrganisationPermissions.ts +1 -1
  478. package/src/hooks/useOrganisationSecurity.ts +2 -2
  479. package/src/hooks/usePermissionCache.test.ts +9 -9
  480. package/src/hooks/usePermissionCache.ts +2 -2
  481. package/src/index.ts +19 -12
  482. package/src/providers/OrganisationProvider.tsx +73 -9
  483. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +113 -13
  484. package/src/providers/__tests__/AuthProvider.test.tsx +2 -1
  485. package/src/providers/__tests__/EventProvider.test.tsx +24 -15
  486. package/src/providers/__tests__/OrganisationProvider.test.tsx +87 -36
  487. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +80 -24
  488. package/src/providers/index.ts +0 -3
  489. package/src/providers/services/AuthServiceProvider.tsx +2 -17
  490. package/src/providers/services/EventServiceProvider.tsx +11 -16
  491. package/src/providers/services/InactivityServiceProvider.tsx +9 -12
  492. package/src/providers/services/OrganisationServiceProvider.tsx +9 -12
  493. package/src/providers/services/UnifiedAuthProvider.tsx +85 -18
  494. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +11 -4
  495. package/src/rbac/__tests__/scenarios.user-role.test.tsx +105 -21
  496. package/src/rbac/adapters.tsx +1 -1
  497. package/src/rbac/api.ts +20 -4
  498. package/src/rbac/audit-enhanced.ts +47 -2
  499. package/src/rbac/audit.ts +47 -2
  500. package/src/rbac/components/NavigationGuard.tsx +1 -1
  501. package/src/rbac/components/NavigationProvider.test.tsx +7 -6
  502. package/src/rbac/components/NavigationProvider.tsx +1 -1
  503. package/src/rbac/components/PagePermissionGuard.tsx +1 -1
  504. package/src/rbac/components/PagePermissionProvider.test.tsx +7 -6
  505. package/src/rbac/components/PagePermissionProvider.tsx +1 -1
  506. package/src/rbac/components/PermissionEnforcer.tsx +1 -1
  507. package/src/rbac/components/RoleBasedRouter.tsx +1 -1
  508. package/src/rbac/components/SecureDataProvider.test.tsx +7 -6
  509. package/src/rbac/components/SecureDataProvider.tsx +1 -1
  510. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +6 -6
  511. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +11 -10
  512. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +10 -11
  513. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +19 -15
  514. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +13 -12
  515. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +19 -15
  516. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +18 -18
  517. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +11 -10
  518. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +8 -7
  519. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +10 -11
  520. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +48 -19
  521. package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +476 -0
  522. package/src/rbac/hooks/index.ts +3 -0
  523. package/src/rbac/hooks/usePermissions.ts +31 -85
  524. package/src/rbac/hooks/useRBAC.test.ts +13 -1
  525. package/src/rbac/hooks/useRBAC.ts +13 -67
  526. package/src/rbac/hooks/useResolvedScope.ts +11 -0
  527. package/src/rbac/hooks/useSecureSupabase.ts +308 -0
  528. package/src/rbac/index.ts +3 -0
  529. package/src/rbac/secureClient.ts +53 -6
  530. package/src/rbac/security.ts +37 -1
  531. package/src/{types/rbac-functions.ts → rbac/types/functions.ts} +30 -30
  532. package/src/rbac/types.ts +3 -2
  533. package/src/services/AuthService.ts +33 -25
  534. package/src/services/EventService.ts +56 -44
  535. package/src/services/InactivityService.ts +33 -53
  536. package/src/services/OrganisationService.ts +36 -40
  537. package/src/services/__tests__/AuthService.restoreSession.test.ts +6 -2
  538. package/src/services/__tests__/EventService.test.ts +67 -33
  539. package/src/services/interfaces/IEventService.ts +1 -1
  540. package/src/styles/core.css +2 -2
  541. package/src/styles/index.ts +1 -5
  542. package/src/types/__tests__/guards.test.ts +1 -1
  543. package/src/types/__tests__/type-validation.test.ts +0 -1
  544. package/src/types/auth.ts +42 -2
  545. package/src/types/core.ts +251 -0
  546. package/src/types/database.ts +11 -496
  547. package/src/types/event.ts +102 -0
  548. package/src/types/file-reference.ts +6 -4
  549. package/src/types/guards.ts +2 -1
  550. package/src/types/index.ts +48 -14
  551. package/src/types/lodash.debounce.d.ts +15 -0
  552. package/src/types/organisation.ts +14 -10
  553. package/src/types/supabase.ts +15 -17
  554. package/src/utils/__tests__/secureErrors.unit.test.ts +1 -1
  555. package/src/utils/__tests__/validationUtils.unit.test.ts +0 -29
  556. package/src/utils/app/appNameResolver.ts +1 -1
  557. package/src/utils/dynamic/dynamicUtils.ts +3 -2
  558. package/src/utils/file-reference/index.ts +25 -6
  559. package/src/utils/security/secureErrors.ts +1 -1
  560. package/src/utils/validation/index.ts +6 -12
  561. package/src/utils/validation/validationUtils.ts +0 -13
  562. package/dist/UnifiedAuthProvider-B37ATQHE.js +0 -16
  563. package/dist/auth-DReDSLq9.d.ts +0 -16
  564. package/dist/chunk-3JI76CYK.js +0 -2444
  565. package/dist/chunk-3JI76CYK.js.map +0 -1
  566. package/dist/chunk-56XJ3TU6.js +0 -11
  567. package/dist/chunk-56XJ3TU6.js.map +0 -1
  568. package/dist/chunk-5MT24GKJ.js.map +0 -1
  569. package/dist/chunk-7QCC6MCP.js +0 -288
  570. package/dist/chunk-BESYRHQM.js.map +0 -1
  571. package/dist/chunk-BJPBT3CU.js +0 -21
  572. package/dist/chunk-BJPBT3CU.js.map +0 -1
  573. package/dist/chunk-BVYWGZVV.js.map +0 -1
  574. package/dist/chunk-CX5M4ZAG.js.map +0 -1
  575. package/dist/chunk-D7LCGMVS.js.map +0 -1
  576. package/dist/chunk-EGI6MUL6.js +0 -27
  577. package/dist/chunk-EGI6MUL6.js.map +0 -1
  578. package/dist/chunk-ERISIBYU.js.map +0 -1
  579. package/dist/chunk-HRO5HWN2.js.map +0 -1
  580. package/dist/chunk-HZLDFOE4.js.map +0 -1
  581. package/dist/chunk-JISYG63F.js +0 -70
  582. package/dist/chunk-JISYG63F.js.map +0 -1
  583. package/dist/chunk-LIMSTKYD.js +0 -61
  584. package/dist/chunk-LIMSTKYD.js.map +0 -1
  585. package/dist/chunk-OWAG3GSU.js.map +0 -1
  586. package/dist/chunk-PPMP5J6T.js.map +0 -1
  587. package/dist/chunk-Q5QRDWKI.js.map +0 -1
  588. package/dist/chunk-S5OFRT4M.js.map +0 -1
  589. package/dist/chunk-SBVILCCA.js.map +0 -1
  590. package/dist/chunk-TUMEWN34.js +0 -15
  591. package/dist/chunk-TUMEWN34.js.map +0 -1
  592. package/dist/chunk-XDNLUEXI.js +0 -138
  593. package/dist/chunk-XJ2HZOBU.js.map +0 -1
  594. package/dist/chunk-ZYTYSTO5.js.map +0 -1
  595. package/dist/chunk-ZZ2SS7NI.js +0 -237
  596. package/dist/chunk-ZZ2SS7NI.js.map +0 -1
  597. package/dist/database-C6jy7EOu.d.ts +0 -500
  598. package/dist/organisation-D6qRDtbF.d.ts +0 -93
  599. package/dist/schema-DTDZQe2u.d.ts +0 -28
  600. package/dist/unified-DQ4VcT7H.d.ts +0 -198
  601. package/dist/useInactivityTracker-TO6ZOF35.js +0 -11
  602. package/dist/validation.d.ts +0 -47
  603. package/dist/validation.js +0 -24
  604. package/dist/validation.js.map +0 -1
  605. package/docs/DOCUMENTATION_AUDIT.md +0 -172
  606. package/docs/DOCUMENTATION_STANDARD.md +0 -137
  607. package/docs/api/classes/PublicErrorBoundary.md +0 -132
  608. package/docs/api/interfaces/EventLogoProps.md +0 -152
  609. package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
  610. package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
  611. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
  612. package/docs/architecture/rpc-function-standards.md +0 -1106
  613. package/docs/getting-started/consuming-app-vite-config.md +0 -239
  614. package/docs/implementation-guides/event-theming-summary.md +0 -226
  615. package/docs/implementation-guides/public-pages-advanced.md +0 -1038
  616. package/docs/migration/v0.4.15-tailwind-scanning.md +0 -278
  617. package/docs/migration/v0.4.16-css-first-approach.md +0 -312
  618. package/docs/migration/v0.4.17-source-path-fix.md +0 -235
  619. package/docs/rbac/RBAC_EVENT_CONTEXT_LOADING.md +0 -222
  620. package/docs/rbac/RBAC_LOGIN_SAFETY_FIX.md +0 -95
  621. package/docs/rbac/RBAC_V0.5.147_FIX.md +0 -117
  622. package/docs/rbac/README-rbac-rls-integration.md +0 -374
  623. package/docs/styles/usage.md +0 -227
  624. package/docs/testing/visual-testing.md +0 -120
  625. package/docs/troubleshooting/DEBUG_NETWORK_ERROR.md +0 -152
  626. package/docs/troubleshooting/FIX_SUPABASE_CORS.md +0 -184
  627. package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +0 -193
  628. package/docs/troubleshooting/database-view-compatibility.md +0 -125
  629. package/docs/troubleshooting/react-hooks-issue-analysis.md +0 -172
  630. package/docs/troubleshooting/tailwind-content-scanning.md +0 -219
  631. package/examples/RBAC/EventBasedApp.tsx +0 -239
  632. package/examples/RBAC/PermissionExample.tsx +0 -151
  633. package/examples/STRUCTURE.md +0 -125
  634. package/examples/components 2/DataTable/HierarchicalExample.tsx +0 -475
  635. package/examples/components 2/Dialog/BasicHtmlTest.tsx +0 -55
  636. package/examples/components 2/Dialog/DebugHtmlExample.tsx +0 -68
  637. package/examples/components 2/Dialog/HtmlDialogExample.tsx +0 -202
  638. package/examples/components 2/Dialog/SimpleHtmlTest.tsx +0 -61
  639. package/examples/components 2/Dialog/SmartDialogExample.tsx +0 -322
  640. package/examples/components 2/index.ts +0 -11
  641. package/examples/features/index.ts +0 -12
  642. package/examples/features/rbac/CompleteRBACExample.tsx +0 -324
  643. package/examples/features/rbac/index.ts +0 -13
  644. package/examples/public-pages/CorrectPublicPageImplementation.tsx +0 -301
  645. package/examples/public-pages/PublicEventPage.tsx +0 -274
  646. package/examples/public-pages/PublicPageApp.tsx +0 -308
  647. package/examples/public-pages/PublicPageUsageExample.tsx +0 -216
  648. package/examples/public-pages/index.ts +0 -14
  649. package/src/__tests__/TEST_STANDARD.md +0 -1008
  650. package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
  651. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -421
  652. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -177
  653. package/src/components/DataTable/examples/PerformanceExample.tsx +0 -506
  654. package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +0 -316
  655. package/src/components/DataTable/examples/__tests__/HierarchicalExample.test.tsx +0 -45
  656. package/src/components/DataTable/examples/__tests__/InitialPageSizeExample.test.tsx +0 -211
  657. package/src/components/DataTable/examples/__tests__/PerformanceExample.test.tsx +0 -126
  658. package/src/components/Dialog/README.md +0 -804
  659. package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
  660. package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
  661. package/src/components/Dialog/examples/ScrollableDialogExample.tsx +0 -290
  662. package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
  663. package/src/components/Dialog/examples/__tests__/HtmlDialogExample.test.tsx +0 -71
  664. package/src/components/Dialog/examples/__tests__/SimpleHtmlTest.test.tsx +0 -122
  665. package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -147
  666. package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
  667. package/src/components/Dialog/utils/safeHtml.ts +0 -185
  668. package/src/components/EventSelector/types.ts +0 -79
  669. package/src/components/Form/FormErrorSummary.tsx +0 -113
  670. package/src/components/Form/FormField.tsx +0 -249
  671. package/src/components/Form/FormFieldset.tsx +0 -127
  672. package/src/components/Form/FormLiveRegion.tsx +0 -198
  673. package/src/components/Input/__mocks__/Input.tsx +0 -2
  674. package/src/components/NavigationMenu/types.ts +0 -85
  675. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -326
  676. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -1078
  677. package/src/components/PasswordReset/PasswordResetForm.test.tsx +0 -597
  678. package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
  679. package/src/components/PasswordReset/index.ts +0 -2
  680. package/src/components/ProtectedRoute/README.md +0 -164
  681. package/src/components/PublicLayout/EventLogo.tsx +0 -175
  682. package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -282
  683. package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -216
  684. package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -131
  685. package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
  686. package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
  687. package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
  688. package/src/components/PublicLayout/PublicPageHeader.tsx +0 -209
  689. package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -449
  690. package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -393
  691. package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +0 -192
  692. package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -351
  693. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -402
  694. package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -460
  695. package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -313
  696. package/src/components/Select/hooks.ts +0 -289
  697. package/src/hooks/useCounter.test.ts +0 -131
  698. package/src/hooks/useDebounce.test.ts +0 -375
  699. package/src/providers/AuthProvider.tsx +0 -15
  700. package/src/providers/EventProvider.tsx +0 -16
  701. package/src/providers/InactivityProvider.tsx +0 -15
  702. package/src/providers/OrganisationProvider.context.test.tsx +0 -169
  703. package/src/providers/UnifiedAuthProvider.tsx +0 -15
  704. package/src/types/theme.ts +0 -6
  705. package/src/types/unified.ts +0 -265
  706. package/src/utils/appConfig.ts +0 -47
  707. package/src/utils/appIdResolver.test.ts +0 -499
  708. package/src/utils/appIdResolver.ts +0 -130
  709. package/src/utils/appNameResolver.simple.test.ts +0 -212
  710. package/src/utils/appNameResolver.test.ts +0 -121
  711. package/src/utils/appNameResolver.ts +0 -191
  712. package/src/utils/audit.ts +0 -127
  713. package/src/utils/auth-utils.ts +0 -96
  714. package/src/utils/bundleAnalysis.ts +0 -129
  715. package/src/utils/debugLogger.ts +0 -67
  716. package/src/utils/deviceFingerprint.ts +0 -215
  717. package/src/utils/dynamicUtils.ts +0 -105
  718. package/src/utils/file-reference.test.ts +0 -788
  719. package/src/utils/file-reference.ts +0 -519
  720. package/src/utils/formatDate.test.ts +0 -237
  721. package/src/utils/formatting.ts +0 -170
  722. package/src/utils/lazyLoad.tsx +0 -44
  723. package/src/utils/logger.ts +0 -179
  724. package/src/utils/organisationContext.test.ts +0 -322
  725. package/src/utils/organisationContext.ts +0 -153
  726. package/src/utils/performanceBenchmark.ts +0 -64
  727. package/src/utils/performanceBudgets.ts +0 -110
  728. package/src/utils/permissionTypes.ts +0 -37
  729. package/src/utils/permissionUtils.test.ts +0 -393
  730. package/src/utils/permissionUtils.ts +0 -34
  731. package/src/utils/sanitization.ts +0 -264
  732. package/src/utils/schemaUtils.ts +0 -37
  733. package/src/utils/secureDataAccess.test.ts +0 -711
  734. package/src/utils/secureDataAccess.ts +0 -377
  735. package/src/utils/secureErrors.ts +0 -79
  736. package/src/utils/security.ts +0 -156
  737. package/src/utils/securityMonitor.ts +0 -45
  738. package/src/utils/sessionTracking.ts +0 -126
  739. package/src/utils/validation.ts +0 -111
  740. package/src/utils/validationUtils.ts +0 -120
  741. package/src/validation/index.ts +0 -12
  742. /package/dist/{DataTable-UA6CL4JI.js.map → DataTable-QAB34V6K.js.map} +0 -0
  743. /package/dist/{UnifiedAuthProvider-B37ATQHE.js.map → UnifiedAuthProvider-7F6T4B6K.js.map} +0 -0
  744. /package/dist/{api-45XYYO2A.js.map → api-ROMBCNKU.js.map} +0 -0
  745. /package/dist/{audit-64X3VJXB.js.map → audit-WRS3KJKI.js.map} +0 -0
  746. /package/dist/{chunk-PLDDJCW6.js.map → chunk-7D4SUZUM.js.map} +0 -0
  747. /package/dist/{useInactivityTracker-TO6ZOF35.js.map → chunk-KQCRWDSA.js.map} +0 -0
  748. /package/examples/{components 2/DataTable → DataTable}/InitialPageSizeExample.tsx +0 -0
  749. /package/examples/{features/public-pages → PublicPages}/index.ts +0 -0
  750. /package/examples/{RBAC → rbac}/index.ts +0 -0
@@ -1,4 +1,5 @@
1
1
  import {
2
+ OrganisationContextRequiredError,
2
3
  getAccessLevel,
3
4
  getPermissionMap,
4
5
  getRBACLogger,
@@ -6,26 +7,179 @@ import {
6
7
  isPermitted,
7
8
  isPermittedCached,
8
9
  resolveAppContext
9
- } from "./chunk-BVYWGZVV.js";
10
+ } from "./chunk-M7W4CP3M.js";
10
11
  import {
11
- init_useOrganisations,
12
12
  useEvents,
13
13
  useOrganisations
14
- } from "./chunk-LIMSTKYD.js";
14
+ } from "./chunk-QCDXODCA.js";
15
15
  import {
16
- init_UnifiedAuthProvider,
17
16
  useUnifiedAuth
18
- } from "./chunk-3JI76CYK.js";
17
+ } from "./chunk-FUEYYMX5.js";
19
18
  import {
20
19
  getCurrentAppName
21
- } from "./chunk-Q5QRDWKI.js";
20
+ } from "./chunk-F2IMUDXZ.js";
22
21
  import {
23
22
  createLogger,
24
- init_logger
25
- } from "./chunk-XDNLUEXI.js";
23
+ logger
24
+ } from "./chunk-PWLANIRT.js";
25
+
26
+ // src/rbac/secureClient.ts
27
+ import { createClient } from "@supabase/supabase-js";
28
+ var SecureSupabaseClient = class _SecureSupabaseClient {
29
+ constructor(supabaseUrl, supabaseKey, organisationId, eventId, appId) {
30
+ this.edgeFunctionClient = null;
31
+ this.supabaseUrl = supabaseUrl;
32
+ this.supabaseKey = supabaseKey;
33
+ this.organisationId = organisationId;
34
+ this.eventId = eventId;
35
+ this.appId = appId;
36
+ this.supabase = createClient(supabaseUrl, supabaseKey, {
37
+ global: {
38
+ headers: {
39
+ "x-organisation-id": organisationId,
40
+ "x-event-id": eventId || "",
41
+ "x-app-id": appId || ""
42
+ }
43
+ }
44
+ });
45
+ this.setupContextInjection();
46
+ this.setupEdgeFunctionHandling();
47
+ }
48
+ /**
49
+ * Setup context injection for all database operations
50
+ */
51
+ setupContextInjection() {
52
+ const originalFrom = this.supabase.from.bind(this.supabase);
53
+ this.supabase.from = (table) => {
54
+ this.validateContext();
55
+ const query = originalFrom(table);
56
+ return this.injectContext(query);
57
+ };
58
+ const originalRpc = this.supabase.rpc.bind(this.supabase);
59
+ this.supabase.rpc = (fn, args, options) => {
60
+ this.validateContext();
61
+ const contextArgs = {
62
+ ...args,
63
+ p_organisation_id: this.organisationId,
64
+ p_event_id: this.eventId,
65
+ p_app_id: this.appId
66
+ };
67
+ return originalRpc(fn, contextArgs, options);
68
+ };
69
+ }
70
+ /**
71
+ * Setup Edge Function handling to bypass custom headers
72
+ * Edge Functions may not have CORS configured to accept custom headers,
73
+ * so we create a separate client without custom headers for Edge Function calls
74
+ *
75
+ * NOTE: We store the edge function client but don't override functions here.
76
+ * Instead, we provide a method to get the edge function client for direct use.
77
+ * This avoids interfering with the main client's operations.
78
+ */
79
+ setupEdgeFunctionHandling() {
80
+ this.edgeFunctionClient = createClient(this.supabaseUrl, this.supabaseKey);
81
+ }
82
+ /**
83
+ * Get a client for Edge Function calls without custom headers
84
+ * Edge Functions may not have CORS configured to accept custom headers
85
+ * @returns Supabase client without custom headers for Edge Function calls
86
+ */
87
+ getEdgeFunctionClient() {
88
+ return this.edgeFunctionClient || this.supabase;
89
+ }
90
+ /**
91
+ * Inject organisation context into a query
92
+ */
93
+ injectContext(query) {
94
+ const originalSelect = query.select.bind(query);
95
+ const originalInsert = query.insert.bind(query);
96
+ const originalUpdate = query.update.bind(query);
97
+ const originalDelete = query.delete.bind(query);
98
+ query.select = (columns) => {
99
+ const result = originalSelect(columns);
100
+ return this.addOrganisationFilter(result);
101
+ };
102
+ query.insert = (values) => {
103
+ const contextValues = Array.isArray(values) ? values.map((v) => ({ ...v, organisation_id: this.organisationId })) : { ...values, organisation_id: this.organisationId };
104
+ return originalInsert(contextValues);
105
+ };
106
+ query.update = (values) => {
107
+ const result = originalUpdate(values);
108
+ return this.addOrganisationFilter(result);
109
+ };
110
+ query.delete = () => {
111
+ const result = originalDelete();
112
+ return this.addOrganisationFilter(result);
113
+ };
114
+ return query;
115
+ }
116
+ /**
117
+ * Add organisation filter to a query
118
+ */
119
+ addOrganisationFilter(query) {
120
+ return query.eq("organisation_id", this.organisationId);
121
+ }
122
+ /**
123
+ * Validate that required context is present
124
+ */
125
+ validateContext() {
126
+ if (!this.organisationId) {
127
+ throw new OrganisationContextRequiredError();
128
+ }
129
+ }
130
+ /**
131
+ * Get the current organisation ID
132
+ */
133
+ getOrganisationId() {
134
+ return this.organisationId;
135
+ }
136
+ /**
137
+ * Get the current event ID
138
+ */
139
+ getEventId() {
140
+ return this.eventId;
141
+ }
142
+ /**
143
+ * Get the current app ID
144
+ */
145
+ getAppId() {
146
+ return this.appId;
147
+ }
148
+ /**
149
+ * Create a new client with updated context
150
+ */
151
+ withContext(updates) {
152
+ return new _SecureSupabaseClient(
153
+ this.supabaseUrl,
154
+ this.supabaseKey,
155
+ updates.organisationId || this.organisationId,
156
+ updates.eventId !== void 0 ? updates.eventId : this.eventId,
157
+ updates.appId !== void 0 ? updates.appId : this.appId
158
+ );
159
+ }
160
+ /**
161
+ * Get the underlying Supabase client (for internal use only)
162
+ * @internal
163
+ */
164
+ getClient() {
165
+ return new Proxy(this.supabase, {
166
+ get: (target, prop) => {
167
+ if (prop === "functions" && this.edgeFunctionClient) {
168
+ return this.edgeFunctionClient.functions;
169
+ }
170
+ return target[prop];
171
+ }
172
+ });
173
+ }
174
+ };
175
+ function createSecureClient(supabaseUrl, supabaseKey, organisationId, eventId, appId) {
176
+ return new SecureSupabaseClient(supabaseUrl, supabaseKey, organisationId, eventId, appId);
177
+ }
178
+ function fromSupabaseClient(client, organisationId, eventId, appId) {
179
+ throw new Error("fromSupabaseClient is not supported. Use createSecureClient instead.");
180
+ }
26
181
 
27
182
  // src/rbac/hooks/useRBAC.ts
28
- init_UnifiedAuthProvider();
29
183
  import { useState, useEffect, useCallback, useMemo } from "react";
30
184
  function mapAccessLevelToEventRole(level) {
31
185
  switch (level) {
@@ -43,7 +197,7 @@ function mapAccessLevelToEventRole(level) {
43
197
  }
44
198
  }
45
199
  function useRBAC(pageId) {
46
- const logger = getRBACLogger();
200
+ const logger2 = getRBACLogger();
47
201
  const {
48
202
  user,
49
203
  session,
@@ -56,24 +210,6 @@ function useRBAC(pageId) {
56
210
  eventLoading
57
211
  } = useUnifiedAuth();
58
212
  const requiresEvent = appConfig?.requires_event ?? (appConfig === null ? true : false);
59
- if (user && session) {
60
- const hookInitLog = {
61
- appName,
62
- requiresEvent,
63
- appConfig: appConfig ? JSON.stringify(appConfig) : "null",
64
- hasUser: !!user,
65
- hasSession: !!session,
66
- hasSelectedEvent: !!selectedEvent,
67
- eventLoading,
68
- selectedEventId: selectedEvent?.event_id,
69
- hasSelectedOrganisation: !!selectedOrganisation,
70
- organisationId: selectedOrganisation?.id,
71
- orgContextReady,
72
- orgLoading
73
- };
74
- logger.warn("[useRBAC] Hook initialized", hookInitLog);
75
- console.warn("[useRBAC] Hook initialized (direct log)", hookInitLog);
76
- }
77
213
  const [globalRole, setGlobalRole] = useState(null);
78
214
  const [organisationRole, setOrganisationRole] = useState(null);
79
215
  const [eventAppRole, setEventAppRole] = useState(null);
@@ -96,31 +232,17 @@ function useRBAC(pageId) {
96
232
  }
97
233
  if (orgLoading || !orgContextReady || !selectedOrganisation?.id) {
98
234
  setIsLoading(true);
99
- logger.warn("[useRBAC] Waiting for organisation context before loading RBAC context", {
100
- orgLoading,
101
- orgContextReady,
102
- hasSelectedOrganisation: !!selectedOrganisation,
103
- organisationId: selectedOrganisation?.id,
104
- appName
105
- });
106
235
  return;
107
236
  }
108
237
  if (requiresEvent) {
109
238
  if (eventLoading || !selectedEvent) {
110
239
  setIsLoading(true);
111
- logger.warn("[useRBAC] Waiting for event context before loading RBAC context", {
112
- eventLoading,
113
- hasSelectedEvent: !!selectedEvent,
114
- appName,
115
- selectedEventId: selectedEvent?.event_id,
116
- organisationId: selectedOrganisation?.id
117
- });
118
240
  return;
119
241
  }
120
242
  }
121
243
  setIsLoading(true);
122
244
  setError(null);
123
- logger.warn("[useRBAC] Loading RBAC context", {
245
+ logger2.debug("[useRBAC] Loading RBAC context", {
124
246
  appName,
125
247
  requiresEvent,
126
248
  hasSelectedEvent: !!selectedEvent,
@@ -138,7 +260,7 @@ function useRBAC(pageId) {
138
260
  appId = resolved.appId;
139
261
  } catch (rpcError) {
140
262
  if (rpcError?.message?.includes("NetworkError") || rpcError?.message?.includes("fetch")) {
141
- logger.warn("[useRBAC] NetworkError resolving app context - may be timing issue, will retry when context is ready", {
263
+ logger2.warn("[useRBAC] NetworkError resolving app context - may be timing issue, will retry when context is ready", {
142
264
  appName,
143
265
  error: rpcError.message,
144
266
  requiresEvent,
@@ -156,13 +278,6 @@ function useRBAC(pageId) {
156
278
  eventId: selectedEvent?.event_id || void 0,
157
279
  appId
158
280
  };
159
- logger.warn("[useRBAC] Building scope for RBAC context", {
160
- organisationId: scope.organisationId,
161
- eventId: scope.eventId,
162
- appId: scope.appId,
163
- hasOrganisationId: !!scope.organisationId,
164
- hasEventId: !!scope.eventId
165
- });
166
281
  setCurrentScope(scope);
167
282
  const [map, roleContext, accessLevel] = await Promise.all([
168
283
  getPermissionMap({ userId: user.id, scope }),
@@ -173,22 +288,23 @@ function useRBAC(pageId) {
173
288
  setGlobalRole(roleContext.globalRole);
174
289
  setOrganisationRole(roleContext.organisationRole);
175
290
  setEventAppRole(roleContext.eventAppRole || mapAccessLevelToEventRole(accessLevel));
176
- logger.warn("[useRBAC] RBAC context loaded successfully", {
177
- appName,
178
- permissionCount: Object.keys(map).length,
179
- globalRole: roleContext.globalRole,
180
- organisationRole: roleContext.organisationRole,
181
- eventAppRole: roleContext.eventAppRole || mapAccessLevelToEventRole(accessLevel)
182
- });
291
+ const permissionCount = Object.keys(map).length;
292
+ if (permissionCount === 0) {
293
+ logger2.warn("[useRBAC] RBAC context loaded but returned 0 permissions", {
294
+ appName,
295
+ organisationId: selectedOrganisation.id,
296
+ eventId: selectedEvent?.event_id
297
+ });
298
+ }
183
299
  } catch (err) {
184
300
  const handledError = err instanceof Error ? err : new Error("Failed to load RBAC context");
185
- logger.error("[useRBAC] Error loading RBAC context:", handledError);
301
+ logger2.error("[useRBAC] Error loading RBAC context:", handledError);
186
302
  setError(handledError);
187
303
  resetState();
188
304
  } finally {
189
305
  setIsLoading(false);
190
306
  }
191
- }, [appName, logger, resetState, selectedEvent?.event_id, selectedOrganisation?.id, session, user, requiresEvent, eventLoading, appConfig, orgContextReady, orgLoading]);
307
+ }, [appName, logger2, resetState, selectedEvent?.event_id, selectedOrganisation?.id, session, user, requiresEvent, eventLoading, appConfig, orgContextReady, orgLoading]);
192
308
  const hasGlobalPermission = useCallback(
193
309
  (permission) => {
194
310
  if (globalRole === "super_admin" || permissionMap["*"]) {
@@ -210,19 +326,6 @@ function useRBAC(pageId) {
210
326
  const canManageOrganisation = useMemo(() => isSuperAdmin || organisationRole === "org_admin", [isSuperAdmin, organisationRole]);
211
327
  const canManageEvent = useMemo(() => isSuperAdmin || eventAppRole === "event_admin", [isSuperAdmin, eventAppRole]);
212
328
  useEffect(() => {
213
- logger.warn("[useRBAC] useEffect triggered - calling loadRBACContext", {
214
- appName,
215
- requiresEvent,
216
- eventLoading,
217
- hasSelectedEvent: !!selectedEvent,
218
- selectedEventId: selectedEvent?.event_id,
219
- hasUser: !!user,
220
- hasSession: !!session,
221
- hasSelectedOrganisation: !!selectedOrganisation,
222
- organisationId: selectedOrganisation?.id,
223
- orgContextReady,
224
- orgLoading
225
- });
226
329
  loadRBACContext();
227
330
  }, [loadRBACContext, appName, requiresEvent, eventLoading, selectedEvent?.event_id, user, session, selectedOrganisation?.id, orgContextReady, orgLoading]);
228
331
  return {
@@ -265,7 +368,6 @@ async function createScopeFromEvent(supabase, eventId, appId) {
265
368
  }
266
369
 
267
370
  // src/rbac/hooks/useResolvedScope.ts
268
- init_logger();
269
371
  var log = createLogger("useResolvedScope");
270
372
  function useResolvedScope({
271
373
  supabase,
@@ -302,6 +404,14 @@ function useResolvedScope({
302
404
  useEffect2(() => {
303
405
  let cancelled = false;
304
406
  const resolveScope = async () => {
407
+ if (!supabase && !selectedOrganisationId && !selectedEventId) {
408
+ if (!cancelled) {
409
+ setResolvedScope(null);
410
+ setIsLoading(false);
411
+ setError(null);
412
+ }
413
+ return;
414
+ }
305
415
  setIsLoading(true);
306
416
  setError(null);
307
417
  try {
@@ -403,35 +513,20 @@ function useResolvedScope({
403
513
  }
404
514
 
405
515
  // src/rbac/hooks/usePermissions.ts
406
- import React, { useState as useState3, useEffect as useEffect3, useCallback as useCallback2, useMemo as useMemo2, useRef as useRef2 } from "react";
516
+ import { useState as useState3, useEffect as useEffect3, useCallback as useCallback2, useMemo as useMemo2, useRef as useRef2 } from "react";
407
517
  function usePermissions(userId, organisationId, eventId, appId) {
408
518
  const [permissions, setPermissions] = useState3({});
409
519
  const [isLoading, setIsLoading] = useState3(true);
410
520
  const [error, setError] = useState3(null);
411
521
  const [fetchTrigger, setFetchTrigger] = useState3(0);
412
522
  const isFetchingRef = useRef2(false);
413
- const logger = getRBACLogger();
523
+ const logger2 = getRBACLogger();
414
524
  const prevValuesRef = useRef2({ userId, organisationId, eventId, appId });
415
525
  const orgId = organisationId || "";
416
- logger.warn("[usePermissions] Hook called with scope", {
417
- userId,
418
- organisationId: orgId,
419
- eventId,
420
- appId,
421
- hasAppId: !!appId,
422
- hasOrganisationId: !!orgId
423
- });
424
- React.useEffect(() => {
425
- logger.warn("[usePermissions] Scope changed (useEffect)", {
426
- userId,
427
- organisationId,
428
- eventId,
429
- appId,
430
- hasAppId: !!appId,
431
- hasOrganisationId: !!organisationId
432
- });
433
- }, [userId, organisationId, eventId, appId]);
434
526
  useEffect3(() => {
527
+ if (!userId) {
528
+ return;
529
+ }
435
530
  if (!orgId || orgId === null || typeof orgId === "string" && orgId.trim() === "") {
436
531
  const timeoutId = setTimeout(() => {
437
532
  setError(new Error("Organisation context is required for permission checks"));
@@ -442,74 +537,38 @@ function usePermissions(userId, organisationId, eventId, appId) {
442
537
  if (error?.message === "Organisation context is required for permission checks") {
443
538
  setError(null);
444
539
  }
445
- }, [organisationId, error]);
540
+ }, [userId, organisationId, error]);
446
541
  const paramsChanged = prevValuesRef.current.userId !== userId || prevValuesRef.current.organisationId !== organisationId || prevValuesRef.current.eventId !== eventId || prevValuesRef.current.appId !== appId;
447
542
  if (paramsChanged) {
448
- logger.warn("[usePermissions] Parameters changed - triggering fetch", {
449
- userId,
450
- organisationId: orgId,
451
- eventId,
452
- appId,
453
- hasAppId: !!appId,
454
- prevAppId: prevValuesRef.current.appId,
455
- appIdChanged: prevValuesRef.current.appId !== appId
456
- });
543
+ if (prevValuesRef.current.appId !== appId) {
544
+ logger2.debug("[usePermissions] AppId changed - triggering fetch", {
545
+ prevAppId: prevValuesRef.current.appId,
546
+ newAppId: appId
547
+ });
548
+ }
457
549
  prevValuesRef.current = { userId, organisationId, eventId, appId };
458
550
  setFetchTrigger((prev) => prev + 1);
459
551
  }
460
552
  useEffect3(() => {
461
553
  const fetchPermissions = async () => {
462
- logger.warn("[usePermissions] Fetch useEffect triggered", {
463
- userId,
464
- orgId,
465
- eventId,
466
- appId,
467
- hasAppId: !!appId,
468
- isFetching: isFetchingRef.current
469
- });
470
554
  if (isFetchingRef.current) {
471
- logger.warn("[usePermissions] Skipping fetch - already fetching", {
472
- userId,
473
- scope: {
474
- organisationId: orgId,
475
- eventId,
476
- appId
477
- }
478
- });
479
555
  return;
480
556
  }
481
557
  if (!userId) {
482
- logger.warn("[usePermissions] Skipping fetch - no userId");
558
+ setPermissions({});
559
+ setIsLoading(false);
560
+ return;
561
+ }
562
+ if (!userId) {
483
563
  setPermissions({});
484
564
  setIsLoading(false);
485
565
  return;
486
566
  }
487
567
  if (!orgId || orgId === null || typeof orgId === "string" && orgId.trim() === "") {
488
- logger.warn("[usePermissions] Skipping fetch - no orgId", {
489
- orgId,
490
- hasOrgId: !!orgId
491
- });
492
568
  setIsLoading(true);
493
569
  setError(null);
494
570
  return;
495
571
  }
496
- if (!appId) {
497
- logger.warn("[usePermissions] Fetching permissions without appId (may return limited permissions)", {
498
- userId,
499
- organisationId: orgId,
500
- eventId,
501
- hasAppId: false
502
- });
503
- }
504
- logger.warn("[usePermissions] Fetching permissions", {
505
- userId,
506
- scope: {
507
- organisationId: orgId,
508
- eventId,
509
- appId
510
- },
511
- hasAppId: !!appId
512
- });
513
572
  try {
514
573
  isFetchingRef.current = true;
515
574
  setIsLoading(true);
@@ -520,18 +579,15 @@ function usePermissions(userId, organisationId, eventId, appId) {
520
579
  appId
521
580
  };
522
581
  const permissionMap = await getPermissionMap({ userId, scope });
523
- logger.warn("[usePermissions] Permissions fetched successfully", {
524
- permissionCount: Object.keys(permissionMap).length,
525
- hasWildcard: !!permissionMap["*"],
526
- scope: {
527
- organisationId: orgId,
528
- eventId,
529
- appId
530
- }
531
- });
582
+ const permissionCount = Object.keys(permissionMap).length;
583
+ if (permissionCount === 0 && Object.keys(permissions).length > 0) {
584
+ logger2.warn("[usePermissions] Permissions fetched but returned empty map", {
585
+ scope: { organisationId: orgId, eventId, appId }
586
+ });
587
+ }
532
588
  setPermissions(permissionMap);
533
589
  } catch (err) {
534
- logger.error("[usePermissions] Failed to fetch permissions:", err);
590
+ logger2.error("[usePermissions] Failed to fetch permissions:", err);
535
591
  setError(err instanceof Error ? err : new Error("Failed to fetch permissions"));
536
592
  } finally {
537
593
  setIsLoading(false);
@@ -584,8 +640,8 @@ function usePermissions(userId, organisationId, eventId, appId) {
584
640
  const permissionMap = await getPermissionMap({ userId, scope });
585
641
  setPermissions(permissionMap);
586
642
  } catch (err) {
587
- const logger2 = getRBACLogger();
588
- logger2.error("Failed to refetch permissions:", err);
643
+ const logger3 = getRBACLogger();
644
+ logger3.error("Failed to refetch permissions:", err);
589
645
  setError(err instanceof Error ? err : new Error("Failed to fetch permissions"));
590
646
  } finally {
591
647
  setIsLoading(false);
@@ -665,8 +721,8 @@ function useCan(userId, scope, permission, pageId, useCache = true) {
665
721
  const result = useCache ? await isPermittedCached({ userId, scope: validScope, permission, pageId }) : await isPermitted({ userId, scope: validScope, permission, pageId });
666
722
  setCan(result);
667
723
  } catch (err) {
668
- const logger = getRBACLogger();
669
- logger.error("Permission check error:", { permission, error: err });
724
+ const logger2 = getRBACLogger();
725
+ logger2.error("Permission check error:", { permission, error: err });
670
726
  setError(err instanceof Error ? err : new Error("Failed to check permission"));
671
727
  setCan(false);
672
728
  } finally {
@@ -901,8 +957,6 @@ function useCachedPermissions(userId, scope) {
901
957
  }
902
958
 
903
959
  // src/rbac/hooks/useResourcePermissions.ts
904
- init_UnifiedAuthProvider();
905
- init_useOrganisations();
906
960
  import { useMemo as useMemo3 } from "react";
907
961
  function useResourcePermissions(resource, options = {}) {
908
962
  const { enableRead = false, requireScope = true } = options;
@@ -1017,7 +1071,6 @@ function useResourcePermissions(resource, options = {}) {
1017
1071
  }
1018
1072
 
1019
1073
  // src/rbac/hooks/useRoleManagement.ts
1020
- init_UnifiedAuthProvider();
1021
1074
  import { useState as useState4, useCallback as useCallback3 } from "react";
1022
1075
  function useRoleManagement() {
1023
1076
  const { user, supabase } = useUnifiedAuth();
@@ -1141,7 +1194,106 @@ function useRoleManagement() {
1141
1194
  };
1142
1195
  }
1143
1196
 
1197
+ // src/rbac/hooks/useSecureSupabase.ts
1198
+ import { useMemo as useMemo4, useRef as useRef3 } from "react";
1199
+ var secureClientCache = /* @__PURE__ */ new Map();
1200
+ var MAX_CACHE_SIZE = 5;
1201
+ function getCacheKey(organisationId, eventId, appId) {
1202
+ return `${organisationId}-${eventId || "no-event"}-${appId || "no-app"}`;
1203
+ }
1204
+ function getSupabaseConfig() {
1205
+ const getEnvVar = (key) => {
1206
+ if (typeof import.meta !== "undefined" && import.meta.env) {
1207
+ return import.meta.env[key];
1208
+ }
1209
+ if (typeof process !== "undefined" && process.env) {
1210
+ return process.env[key];
1211
+ }
1212
+ return void 0;
1213
+ };
1214
+ const supabaseUrl = getEnvVar("VITE_SUPABASE_URL") || getEnvVar("NEXT_PUBLIC_SUPABASE_URL") || null;
1215
+ const supabaseKey = getEnvVar("VITE_SUPABASE_ANON_KEY") || getEnvVar("NEXT_PUBLIC_SUPABASE_ANON_KEY") || null;
1216
+ if (!supabaseUrl || !supabaseKey) {
1217
+ return null;
1218
+ }
1219
+ return { url: supabaseUrl, key: supabaseKey };
1220
+ }
1221
+ function useSecureSupabase(baseClient) {
1222
+ const { user, supabase: authSupabase } = useUnifiedAuth();
1223
+ const { selectedOrganisation } = useOrganisations();
1224
+ const eventsContext = useEvents();
1225
+ const { selectedEvent } = eventsContext;
1226
+ const eventLoading = "eventLoading" in eventsContext ? eventsContext.eventLoading : false;
1227
+ const { resolvedScope } = useResolvedScope({
1228
+ supabase: authSupabase || null,
1229
+ selectedOrganisationId: selectedOrganisation?.id || null,
1230
+ selectedEventId: selectedEvent?.event_id || null
1231
+ });
1232
+ const prevContextRef = useRef3({
1233
+ organisationId: void 0,
1234
+ eventId: void 0,
1235
+ appId: void 0
1236
+ });
1237
+ return useMemo4(() => {
1238
+ if (eventLoading) {
1239
+ return baseClient || authSupabase || null;
1240
+ }
1241
+ if (selectedOrganisation?.id && user?.id) {
1242
+ const organisationId = selectedOrganisation.id;
1243
+ const eventId = selectedEvent?.event_id;
1244
+ const appId = resolvedScope?.appId;
1245
+ prevContextRef.current = { organisationId, eventId, appId };
1246
+ const cacheKey = getCacheKey(organisationId, eventId, appId);
1247
+ const cachedClient = secureClientCache.get(cacheKey);
1248
+ if (cachedClient) {
1249
+ return cachedClient.getClient();
1250
+ }
1251
+ const config = getSupabaseConfig();
1252
+ if (!config || !config.url || !config.key) {
1253
+ logger.warn("useSecureSupabase", "Missing Supabase environment variables. Falling back to base client.", {
1254
+ note: "Ensure VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY are set in your environment."
1255
+ });
1256
+ return baseClient || authSupabase || null;
1257
+ }
1258
+ try {
1259
+ const secureClient = createSecureClient(
1260
+ config.url,
1261
+ config.key,
1262
+ organisationId,
1263
+ // organisationId is string, UUID is string alias
1264
+ eventId,
1265
+ appId
1266
+ // appId is string | undefined, UUID is string alias
1267
+ );
1268
+ secureClientCache.set(cacheKey, secureClient);
1269
+ if (secureClientCache.size > MAX_CACHE_SIZE) {
1270
+ const firstKey = secureClientCache.keys().next().value;
1271
+ if (firstKey) {
1272
+ secureClientCache.delete(firstKey);
1273
+ }
1274
+ }
1275
+ return secureClient.getClient();
1276
+ } catch (error) {
1277
+ logger.error("useSecureSupabase", "Failed to create secure client", error);
1278
+ return baseClient || authSupabase || null;
1279
+ }
1280
+ }
1281
+ return baseClient || authSupabase || null;
1282
+ }, [
1283
+ selectedOrganisation?.id,
1284
+ selectedEvent?.event_id,
1285
+ user?.id,
1286
+ eventLoading,
1287
+ resolvedScope?.appId,
1288
+ baseClient,
1289
+ authSupabase
1290
+ ]);
1291
+ }
1292
+
1144
1293
  export {
1294
+ SecureSupabaseClient,
1295
+ createSecureClient,
1296
+ fromSupabaseClient,
1145
1297
  useRBAC,
1146
1298
  createScopeFromEvent,
1147
1299
  useResolvedScope,
@@ -1153,6 +1305,7 @@ export {
1153
1305
  useHasAllPermissions,
1154
1306
  useCachedPermissions,
1155
1307
  useResourcePermissions,
1156
- useRoleManagement
1308
+ useRoleManagement,
1309
+ useSecureSupabase
1157
1310
  };
1158
- //# sourceMappingURL=chunk-ZYTYSTO5.js.map
1311
+ //# sourceMappingURL=chunk-RA3JUFMW.js.map