@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.
Files changed (756) 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/usePublicEventLogo.test.ts +147 -0
  470. package/src/hooks/public/usePublicRouteParams.ts +1 -1
  471. package/src/hooks/services/useAuth.ts +2 -4
  472. package/src/hooks/services/useCurrentEvent.ts +1 -1
  473. package/src/hooks/useAppConfig.ts +1 -1
  474. package/src/hooks/useDataTablePerformance.ts +2 -2
  475. package/src/hooks/useEventTheme.ts +1 -1
  476. package/src/hooks/useEvents.ts +51 -10
  477. package/src/hooks/useOrganisationPermissions.test.ts +3 -3
  478. package/src/hooks/useOrganisationPermissions.ts +1 -1
  479. package/src/hooks/useOrganisationSecurity.ts +2 -2
  480. package/src/hooks/usePermissionCache.test.ts +9 -9
  481. package/src/hooks/usePermissionCache.ts +2 -2
  482. package/src/index.ts +19 -12
  483. package/src/providers/OrganisationProvider.tsx +73 -9
  484. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +113 -13
  485. package/src/providers/__tests__/AuthProvider.test.tsx +2 -1
  486. package/src/providers/__tests__/EventProvider.test.tsx +24 -15
  487. package/src/providers/__tests__/OrganisationProvider.test.tsx +87 -36
  488. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +80 -24
  489. package/src/providers/index.ts +0 -3
  490. package/src/providers/services/AuthServiceProvider.tsx +2 -17
  491. package/src/providers/services/EventServiceProvider.tsx +11 -16
  492. package/src/providers/services/InactivityServiceProvider.tsx +9 -12
  493. package/src/providers/services/OrganisationServiceProvider.tsx +9 -12
  494. package/src/providers/services/UnifiedAuthProvider.tsx +85 -18
  495. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +11 -4
  496. package/src/rbac/__tests__/scenarios.user-role.test.tsx +105 -21
  497. package/src/rbac/adapters.tsx +1 -1
  498. package/src/rbac/api.ts +20 -4
  499. package/src/rbac/audit-enhanced.ts +47 -2
  500. package/src/rbac/audit.ts +47 -2
  501. package/src/rbac/components/NavigationGuard.tsx +1 -1
  502. package/src/rbac/components/NavigationProvider.test.tsx +7 -6
  503. package/src/rbac/components/NavigationProvider.tsx +1 -1
  504. package/src/rbac/components/PagePermissionGuard.tsx +1 -1
  505. package/src/rbac/components/PagePermissionProvider.test.tsx +7 -6
  506. package/src/rbac/components/PagePermissionProvider.tsx +1 -1
  507. package/src/rbac/components/PermissionEnforcer.tsx +1 -1
  508. package/src/rbac/components/RoleBasedRouter.tsx +1 -1
  509. package/src/rbac/components/SecureDataProvider.test.tsx +7 -6
  510. package/src/rbac/components/SecureDataProvider.tsx +1 -1
  511. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +6 -6
  512. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +11 -10
  513. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +10 -11
  514. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +19 -15
  515. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +13 -12
  516. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +19 -15
  517. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +18 -18
  518. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +11 -10
  519. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +8 -7
  520. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +10 -11
  521. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +48 -19
  522. package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +476 -0
  523. package/src/rbac/hooks/index.ts +3 -0
  524. package/src/rbac/hooks/usePermissions.ts +31 -85
  525. package/src/rbac/hooks/useRBAC.test.ts +13 -1
  526. package/src/rbac/hooks/useRBAC.ts +13 -67
  527. package/src/rbac/hooks/useResolvedScope.ts +11 -0
  528. package/src/rbac/hooks/useSecureSupabase.ts +308 -0
  529. package/src/rbac/index.ts +3 -0
  530. package/src/rbac/secureClient.ts +53 -6
  531. package/src/rbac/security.ts +37 -1
  532. package/src/{types/rbac-functions.ts → rbac/types/functions.ts} +30 -30
  533. package/src/rbac/types.ts +3 -2
  534. package/src/services/AuthService.ts +33 -25
  535. package/src/services/EventService.ts +56 -44
  536. package/src/services/InactivityService.ts +33 -53
  537. package/src/services/OrganisationService.ts +36 -40
  538. package/src/services/__tests__/AuthService.restoreSession.test.ts +6 -2
  539. package/src/services/__tests__/EventService.test.ts +67 -33
  540. package/src/services/interfaces/IEventService.ts +1 -1
  541. package/src/styles/core.css +2 -2
  542. package/src/styles/index.test.ts +21 -0
  543. package/src/styles/index.ts +1 -5
  544. package/src/types/__tests__/guards.test.ts +1 -1
  545. package/src/types/__tests__/organisation.roles.test.ts +55 -0
  546. package/src/types/__tests__/type-validation.test.ts +0 -1
  547. package/src/types/auth.ts +42 -2
  548. package/src/types/core.ts +251 -0
  549. package/src/types/database.ts +11 -496
  550. package/src/types/event.ts +102 -0
  551. package/src/types/file-reference.ts +6 -4
  552. package/src/types/guards.ts +2 -1
  553. package/src/types/index.ts +48 -14
  554. package/src/types/lodash.debounce.d.ts +15 -0
  555. package/src/types/organisation.ts +14 -10
  556. package/src/types/supabase.ts +15 -17
  557. package/src/utils/__tests__/secureErrors.unit.test.ts +1 -1
  558. package/src/utils/__tests__/validationUtils.unit.test.ts +0 -29
  559. package/src/utils/app/appNameResolver.ts +1 -1
  560. package/src/utils/audit/audit.test.ts +65 -0
  561. package/src/utils/device/deviceFingerprint.test.ts +171 -0
  562. package/src/utils/dynamic/dynamicUtils.ts +3 -2
  563. package/src/utils/file-reference/index.ts +25 -6
  564. package/src/utils/security/secureErrors.ts +1 -1
  565. package/src/utils/validation/__tests__/validationUtils.test.ts +72 -0
  566. package/src/utils/validation/index.ts +6 -12
  567. package/src/utils/validation/validationUtils.ts +0 -13
  568. package/dist/UnifiedAuthProvider-B37ATQHE.js +0 -16
  569. package/dist/auth-DReDSLq9.d.ts +0 -16
  570. package/dist/chunk-3JI76CYK.js +0 -2444
  571. package/dist/chunk-3JI76CYK.js.map +0 -1
  572. package/dist/chunk-56XJ3TU6.js +0 -11
  573. package/dist/chunk-56XJ3TU6.js.map +0 -1
  574. package/dist/chunk-5MT24GKJ.js.map +0 -1
  575. package/dist/chunk-7QCC6MCP.js +0 -288
  576. package/dist/chunk-BESYRHQM.js.map +0 -1
  577. package/dist/chunk-BJPBT3CU.js +0 -21
  578. package/dist/chunk-BJPBT3CU.js.map +0 -1
  579. package/dist/chunk-BVYWGZVV.js.map +0 -1
  580. package/dist/chunk-CX5M4ZAG.js.map +0 -1
  581. package/dist/chunk-D7LCGMVS.js.map +0 -1
  582. package/dist/chunk-EGI6MUL6.js +0 -27
  583. package/dist/chunk-EGI6MUL6.js.map +0 -1
  584. package/dist/chunk-ERISIBYU.js.map +0 -1
  585. package/dist/chunk-HRO5HWN2.js.map +0 -1
  586. package/dist/chunk-HZLDFOE4.js.map +0 -1
  587. package/dist/chunk-JISYG63F.js +0 -70
  588. package/dist/chunk-JISYG63F.js.map +0 -1
  589. package/dist/chunk-LIMSTKYD.js +0 -61
  590. package/dist/chunk-LIMSTKYD.js.map +0 -1
  591. package/dist/chunk-OWAG3GSU.js.map +0 -1
  592. package/dist/chunk-PPMP5J6T.js.map +0 -1
  593. package/dist/chunk-Q5QRDWKI.js.map +0 -1
  594. package/dist/chunk-S5OFRT4M.js.map +0 -1
  595. package/dist/chunk-SBVILCCA.js.map +0 -1
  596. package/dist/chunk-TUMEWN34.js +0 -15
  597. package/dist/chunk-TUMEWN34.js.map +0 -1
  598. package/dist/chunk-XDNLUEXI.js +0 -138
  599. package/dist/chunk-XJ2HZOBU.js.map +0 -1
  600. package/dist/chunk-ZYTYSTO5.js.map +0 -1
  601. package/dist/chunk-ZZ2SS7NI.js +0 -237
  602. package/dist/chunk-ZZ2SS7NI.js.map +0 -1
  603. package/dist/database-C6jy7EOu.d.ts +0 -500
  604. package/dist/organisation-D6qRDtbF.d.ts +0 -93
  605. package/dist/schema-DTDZQe2u.d.ts +0 -28
  606. package/dist/unified-DQ4VcT7H.d.ts +0 -198
  607. package/dist/useInactivityTracker-TO6ZOF35.js +0 -11
  608. package/dist/validation.d.ts +0 -47
  609. package/dist/validation.js +0 -24
  610. package/dist/validation.js.map +0 -1
  611. package/docs/DOCUMENTATION_AUDIT.md +0 -172
  612. package/docs/DOCUMENTATION_STANDARD.md +0 -137
  613. package/docs/api/classes/PublicErrorBoundary.md +0 -132
  614. package/docs/api/interfaces/EventLogoProps.md +0 -152
  615. package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
  616. package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
  617. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
  618. package/docs/architecture/rpc-function-standards.md +0 -1106
  619. package/docs/getting-started/consuming-app-vite-config.md +0 -239
  620. package/docs/implementation-guides/event-theming-summary.md +0 -226
  621. package/docs/implementation-guides/public-pages-advanced.md +0 -1038
  622. package/docs/migration/v0.4.15-tailwind-scanning.md +0 -278
  623. package/docs/migration/v0.4.16-css-first-approach.md +0 -312
  624. package/docs/migration/v0.4.17-source-path-fix.md +0 -235
  625. package/docs/rbac/RBAC_EVENT_CONTEXT_LOADING.md +0 -222
  626. package/docs/rbac/RBAC_LOGIN_SAFETY_FIX.md +0 -95
  627. package/docs/rbac/RBAC_V0.5.147_FIX.md +0 -117
  628. package/docs/rbac/README-rbac-rls-integration.md +0 -374
  629. package/docs/styles/usage.md +0 -227
  630. package/docs/testing/visual-testing.md +0 -120
  631. package/docs/troubleshooting/DEBUG_NETWORK_ERROR.md +0 -152
  632. package/docs/troubleshooting/FIX_SUPABASE_CORS.md +0 -184
  633. package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +0 -193
  634. package/docs/troubleshooting/database-view-compatibility.md +0 -125
  635. package/docs/troubleshooting/react-hooks-issue-analysis.md +0 -172
  636. package/docs/troubleshooting/tailwind-content-scanning.md +0 -219
  637. package/examples/RBAC/EventBasedApp.tsx +0 -239
  638. package/examples/RBAC/PermissionExample.tsx +0 -151
  639. package/examples/STRUCTURE.md +0 -125
  640. package/examples/components 2/DataTable/HierarchicalExample.tsx +0 -475
  641. package/examples/components 2/Dialog/BasicHtmlTest.tsx +0 -55
  642. package/examples/components 2/Dialog/DebugHtmlExample.tsx +0 -68
  643. package/examples/components 2/Dialog/HtmlDialogExample.tsx +0 -202
  644. package/examples/components 2/Dialog/SimpleHtmlTest.tsx +0 -61
  645. package/examples/components 2/Dialog/SmartDialogExample.tsx +0 -322
  646. package/examples/components 2/index.ts +0 -11
  647. package/examples/features/index.ts +0 -12
  648. package/examples/features/rbac/CompleteRBACExample.tsx +0 -324
  649. package/examples/features/rbac/index.ts +0 -13
  650. package/examples/public-pages/CorrectPublicPageImplementation.tsx +0 -301
  651. package/examples/public-pages/PublicEventPage.tsx +0 -274
  652. package/examples/public-pages/PublicPageApp.tsx +0 -308
  653. package/examples/public-pages/PublicPageUsageExample.tsx +0 -216
  654. package/examples/public-pages/index.ts +0 -14
  655. package/src/__tests__/TEST_STANDARD.md +0 -1008
  656. package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
  657. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -421
  658. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -177
  659. package/src/components/DataTable/examples/PerformanceExample.tsx +0 -506
  660. package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +0 -316
  661. package/src/components/DataTable/examples/__tests__/HierarchicalExample.test.tsx +0 -45
  662. package/src/components/DataTable/examples/__tests__/InitialPageSizeExample.test.tsx +0 -211
  663. package/src/components/DataTable/examples/__tests__/PerformanceExample.test.tsx +0 -126
  664. package/src/components/Dialog/README.md +0 -804
  665. package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
  666. package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
  667. package/src/components/Dialog/examples/ScrollableDialogExample.tsx +0 -290
  668. package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
  669. package/src/components/Dialog/examples/__tests__/HtmlDialogExample.test.tsx +0 -71
  670. package/src/components/Dialog/examples/__tests__/SimpleHtmlTest.test.tsx +0 -122
  671. package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -147
  672. package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
  673. package/src/components/Dialog/utils/safeHtml.ts +0 -185
  674. package/src/components/EventSelector/types.ts +0 -79
  675. package/src/components/Form/FormErrorSummary.tsx +0 -113
  676. package/src/components/Form/FormField.tsx +0 -249
  677. package/src/components/Form/FormFieldset.tsx +0 -127
  678. package/src/components/Form/FormLiveRegion.tsx +0 -198
  679. package/src/components/Input/__mocks__/Input.tsx +0 -2
  680. package/src/components/NavigationMenu/types.ts +0 -85
  681. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -326
  682. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -1078
  683. package/src/components/PasswordReset/PasswordResetForm.test.tsx +0 -597
  684. package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
  685. package/src/components/PasswordReset/index.ts +0 -2
  686. package/src/components/ProtectedRoute/README.md +0 -164
  687. package/src/components/PublicLayout/EventLogo.tsx +0 -175
  688. package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -282
  689. package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -216
  690. package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -131
  691. package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
  692. package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
  693. package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
  694. package/src/components/PublicLayout/PublicPageHeader.tsx +0 -209
  695. package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -449
  696. package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -393
  697. package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +0 -192
  698. package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -351
  699. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -402
  700. package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -460
  701. package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -313
  702. package/src/components/Select/hooks.ts +0 -289
  703. package/src/hooks/useCounter.test.ts +0 -131
  704. package/src/hooks/useDebounce.test.ts +0 -375
  705. package/src/providers/AuthProvider.tsx +0 -15
  706. package/src/providers/EventProvider.tsx +0 -16
  707. package/src/providers/InactivityProvider.tsx +0 -15
  708. package/src/providers/OrganisationProvider.context.test.tsx +0 -169
  709. package/src/providers/UnifiedAuthProvider.tsx +0 -15
  710. package/src/types/theme.ts +0 -6
  711. package/src/types/unified.ts +0 -265
  712. package/src/utils/appConfig.ts +0 -47
  713. package/src/utils/appIdResolver.test.ts +0 -499
  714. package/src/utils/appIdResolver.ts +0 -130
  715. package/src/utils/appNameResolver.simple.test.ts +0 -212
  716. package/src/utils/appNameResolver.test.ts +0 -121
  717. package/src/utils/appNameResolver.ts +0 -191
  718. package/src/utils/audit.ts +0 -127
  719. package/src/utils/auth-utils.ts +0 -96
  720. package/src/utils/bundleAnalysis.ts +0 -129
  721. package/src/utils/debugLogger.ts +0 -67
  722. package/src/utils/deviceFingerprint.ts +0 -215
  723. package/src/utils/dynamicUtils.ts +0 -105
  724. package/src/utils/file-reference.test.ts +0 -788
  725. package/src/utils/file-reference.ts +0 -519
  726. package/src/utils/formatDate.test.ts +0 -237
  727. package/src/utils/formatting.ts +0 -170
  728. package/src/utils/lazyLoad.tsx +0 -44
  729. package/src/utils/logger.ts +0 -179
  730. package/src/utils/organisationContext.test.ts +0 -322
  731. package/src/utils/organisationContext.ts +0 -153
  732. package/src/utils/performanceBenchmark.ts +0 -64
  733. package/src/utils/performanceBudgets.ts +0 -110
  734. package/src/utils/permissionTypes.ts +0 -37
  735. package/src/utils/permissionUtils.test.ts +0 -393
  736. package/src/utils/permissionUtils.ts +0 -34
  737. package/src/utils/sanitization.ts +0 -264
  738. package/src/utils/schemaUtils.ts +0 -37
  739. package/src/utils/secureDataAccess.test.ts +0 -711
  740. package/src/utils/secureDataAccess.ts +0 -377
  741. package/src/utils/secureErrors.ts +0 -79
  742. package/src/utils/security.ts +0 -156
  743. package/src/utils/securityMonitor.ts +0 -45
  744. package/src/utils/sessionTracking.ts +0 -126
  745. package/src/utils/validation.ts +0 -111
  746. package/src/utils/validationUtils.ts +0 -120
  747. package/src/validation/index.ts +0 -12
  748. /package/dist/{DataTable-UA6CL4JI.js.map → DataTable-QAB34V6K.js.map} +0 -0
  749. /package/dist/{UnifiedAuthProvider-B37ATQHE.js.map → UnifiedAuthProvider-7F6T4B6K.js.map} +0 -0
  750. /package/dist/{api-45XYYO2A.js.map → api-ROMBCNKU.js.map} +0 -0
  751. /package/dist/{audit-64X3VJXB.js.map → audit-WRS3KJKI.js.map} +0 -0
  752. /package/dist/{chunk-PLDDJCW6.js.map → chunk-7D4SUZUM.js.map} +0 -0
  753. /package/dist/{useInactivityTracker-TO6ZOF35.js.map → chunk-KQCRWDSA.js.map} +0 -0
  754. /package/examples/{components 2/DataTable → DataTable}/InitialPageSizeExample.tsx +0 -0
  755. /package/examples/{features/public-pages → PublicPages}/index.ts +0 -0
  756. /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