@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,7 +1,7 @@
1
1
  ---
2
- lastUpdated: 2025-10-29T22:43:00+11:00
3
- version: 0.5.76
4
- reviewedBy: content-audit
2
+ lastUpdated: 2025-11-18T12:00:00+11:00
3
+ version: 0.5.181
4
+ reviewedBy: documentation-standards-audit
5
5
  ---
6
6
 
7
7
  # Hooks API Reference
@@ -14,23 +14,77 @@ This section provides detailed API documentation for all React hooks in `@jmruth
14
14
 
15
15
  ### useUnifiedAuth
16
16
 
17
- A comprehensive hook that combines authentication and event access management.
17
+ A comprehensive hook that combines authentication, organisation context, event access management, and inactivity tracking.
18
18
 
19
19
  ```typescript
20
- interface UseUnifiedAuthReturn {
20
+ interface UnifiedAuthContextType {
21
+ // Auth state
21
22
  user: User | null;
22
23
  session: Session | null;
23
- loading: boolean;
24
- error: AuthError | null;
25
- signIn: (credentials: SignInCredentials) => Promise<void>;
26
- signUp: (credentials: SignUpCredentials) => Promise<void>;
27
- signOut: () => Promise<void>;
28
- resetPassword: (email: string) => Promise<void>;
29
- updatePassword: (password: string) => Promise<void>;
24
+ isAuthenticated: boolean;
25
+ authLoading: boolean;
26
+ authError: AuthError | null;
27
+ error: AuthError | null; // Alias for authError
28
+ supabase: SupabaseClient | null;
29
+
30
+ // Auth methods
31
+ signIn: (email: string, password?: string) => Promise<{ error: AuthError | null }>;
32
+ signUp: (email: string, password: string) => Promise<{ error: AuthError | null }>;
33
+ signOut: () => Promise<{ error: AuthError | null }>;
34
+ resetPassword: (email: string) => Promise<{ error: AuthError | null }>;
35
+ updatePassword: (password: string) => Promise<{ error: AuthError | null }>;
36
+ refreshSession: () => Promise<{ error: AuthError | null }>;
37
+
38
+ // Organisation state
39
+ selectedOrganisation: Organisation | null;
40
+ organisations: Organisation[];
41
+ userMemberships: OrganisationMembership[];
42
+ organisationLoading: boolean;
43
+ organisationError: Error | null;
44
+ hasValidOrganisationContext: boolean;
45
+ isContextReady: boolean;
46
+
47
+ // Organisation methods
48
+ switchOrganisation: (orgId: string) => Promise<void>;
49
+ getUserRole: (orgId?: string) => string;
50
+ validateOrganisationAccess: (orgId: string) => boolean;
51
+ refreshOrganisations: () => Promise<void>;
52
+ ensureOrganisationContext: () => Organisation;
53
+ isOrganisationSecure: () => boolean;
54
+ getPrimaryOrganisation: () => Organisation | null;
55
+
56
+ // Event state
30
57
  events: Event[];
31
58
  selectedEvent: Event | null;
59
+ eventLoading: boolean;
60
+ eventError: Error | null;
61
+
62
+ // Event methods
32
63
  setSelectedEvent: (event: Event | null) => void;
33
- hasEventAccess: (eventId: string) => boolean;
64
+ refreshEvents: () => Promise<void>;
65
+
66
+ // Inactivity state
67
+ showInactivityWarning: boolean;
68
+ inactivityTimeRemaining: number;
69
+ isIdle: boolean;
70
+ timeRemaining: number;
71
+ showWarning: boolean;
72
+ isTracking: boolean;
73
+
74
+ // Inactivity methods
75
+ resetActivity: () => void;
76
+ startTracking: () => void;
77
+ stopTracking: () => void;
78
+ handleIdleLogout: () => Promise<void>;
79
+ handleStaySignedIn: () => void;
80
+ handleSignOutNow: () => Promise<void>;
81
+
82
+ // Additional properties
83
+ appName: string;
84
+ appConfig: { requires_event: boolean } | null;
85
+ isLoading: boolean;
86
+ hasErrors: boolean;
87
+ sessionRestorationTimedOut: boolean;
34
88
  }
35
89
  ```
36
90
 
@@ -43,18 +97,22 @@ function App() {
43
97
  const {
44
98
  user,
45
99
  session,
46
- loading,
47
- error,
100
+ isLoading,
101
+ authError,
48
102
  signIn,
49
103
  signOut,
104
+ selectedOrganisation,
105
+ organisations,
50
106
  events,
51
107
  selectedEvent,
52
108
  setSelectedEvent,
53
- hasEventAccess,
109
+ showWarning,
110
+ handleStaySignedIn,
111
+ handleSignOutNow,
54
112
  } = useUnifiedAuth();
55
113
 
56
- if (loading) return <div>Loading...</div>;
57
- if (error) return <div>Error: {error.message}</div>;
114
+ if (isLoading) return <div>Loading...</div>;
115
+ if (authError) return <div>Error: {authError.message}</div>;
58
116
 
59
117
  return (
60
118
  <div>
@@ -504,6 +562,78 @@ function Dropdown() {
504
562
 
505
563
  ## Performance Hooks
506
564
 
565
+ ### usePerformanceMonitor
566
+
567
+ Monitor overall application performance metrics.
568
+
569
+ ```typescript
570
+ interface PerformanceData {
571
+ renderTime: number;
572
+ memoryUsage: number;
573
+ componentCount: number;
574
+ }
575
+
576
+ function usePerformanceMonitor(): PerformanceData;
577
+ ```
578
+
579
+ #### Usage
580
+
581
+ ```tsx
582
+ import { usePerformanceMonitor } from '@jmruthers/pace-core';
583
+
584
+ function PerformanceDashboard() {
585
+ const metrics = usePerformanceMonitor();
586
+
587
+ return (
588
+ <div>
589
+ <p>Render time: {metrics.renderTime}ms</p>
590
+ <p>Memory usage: {metrics.memoryUsage}MB</p>
591
+ <p>Components: {metrics.componentCount}</p>
592
+ </div>
593
+ );
594
+ }
595
+ ```
596
+
597
+ ### useOperationPerformance
598
+
599
+ Monitor performance of specific operations with budget tracking.
600
+
601
+ ```typescript
602
+ function useOperationPerformance(
603
+ operationName: string,
604
+ budgetName?: string
605
+ ): {
606
+ start: () => void;
607
+ end: () => void;
608
+ duration: number;
609
+ isOverBudget: boolean;
610
+ };
611
+ ```
612
+
613
+ #### Usage
614
+
615
+ ```tsx
616
+ import { useOperationPerformance } from '@jmruthers/pace-core';
617
+
618
+ function ExpensiveOperation() {
619
+ const { start, end, duration, isOverBudget } = useOperationPerformance(
620
+ 'data-processing',
621
+ 'data-processing-budget'
622
+ );
623
+
624
+ const handleProcess = async () => {
625
+ start();
626
+ await processData();
627
+ end();
628
+
629
+ if (isOverBudget) {
630
+ console.warn('Operation exceeded budget');
631
+ }
632
+ };
633
+
634
+ return <button onClick={handleProcess}>Process</button>;
635
+ }
636
+ ```
507
637
 
508
638
  ## Hook Composition
509
639
 
@@ -1290,4 +1420,4 @@ All hooks include comprehensive testing:
1290
1420
  - **Performance Tests**: Memory leak detection
1291
1421
  - **Type Safety**: TypeScript validation
1292
1422
 
1293
- For more information about testing hooks, see the [Testing Guide](../best-practices/testing.md).
1423
+ For more information about testing hooks, see the [Testing Guide](../testing/README.md).
@@ -1,7 +1,7 @@
1
1
  ---
2
- lastUpdated: 2025-10-29T22:43:00+11:00
3
- version: 0.5.76
4
- reviewedBy: content-audit
2
+ lastUpdated: 2025-11-18T20:00:00+11:00
3
+ version: 0.5.181
4
+ reviewedBy: documentation-standards-audit
5
5
  ---
6
6
 
7
7
  # Providers API Reference
@@ -21,7 +21,7 @@ interface UnifiedAuthProviderProps {
21
21
  children: React.ReactNode;
22
22
  persistState?: boolean;
23
23
  requireOrganisationContext?: boolean;
24
- enableRBAC?: boolean;
24
+ // Note: RBAC is always enabled - no prop needed
25
25
  onAuthStateChange?: (event: AuthChangeEvent, session: Session | null) => void;
26
26
 
27
27
  // Inactivity auto-logout configuration - MANDATORY for security
@@ -56,7 +56,6 @@ function App() {
56
56
  <UnifiedAuthProvider
57
57
  supabaseClient={supabase}
58
58
  appName="my-app"
59
- enableRBAC={true}
60
59
  requireOrganisationContext={true}
61
60
  idleTimeoutMs={30 * 60 * 1000} // Required: 30 minutes
62
61
  warnBeforeMs={5 * 60 * 1000} // Required: 5 minutes warning
@@ -76,7 +75,7 @@ function App() {
76
75
  | `appName` | `string` | Required | Name of your application |
77
76
  | `persistState` | `boolean` | `true` | Persist auth state across sessions |
78
77
  | `requireOrganisationContext` | `boolean` | `true` | Require organisation context for security |
79
- | `enableRBAC` | `boolean` | `false` | Enable the RBAC system |
78
+ | RBAC | Always enabled | - | RBAC is always enabled, no configuration needed |
80
79
  | `onAuthStateChange` | `function` | `undefined` | Callback for auth state changes |
81
80
  | `idleTimeoutMs` | `number` | **Required** | Inactivity timeout in milliseconds (e.g., `30 * 60 * 1000` for 30 minutes) |
82
81
  | `warnBeforeMs` | `number` | **Required** | Warning time before logout in milliseconds (e.g., `5 * 60 * 1000` for 5 minutes) |
@@ -572,6 +571,62 @@ Use context splitting when possible to prevent unnecessary re-renders.
572
571
 
573
572
  Only pass required props to avoid unnecessary re-renders and complexity.
574
573
 
574
+ ## ♿ Accessibility
575
+
576
+ Providers support accessibility:
577
+
578
+ - **Keyboard navigation** - All provider-managed components support keyboard navigation
579
+ - **Screen reader support** - Providers ensure proper ARIA attributes and roles
580
+ - **Focus management** - Providers handle focus management correctly
581
+ - **Error announcements** - Error states are properly announced to screen readers
582
+ - **Loading states** - Loading indicators are accessible and announced
583
+
584
+ ### Accessibility Best Practices
585
+
586
+ 1. **Test provider composition** - Verify accessibility works with provider hierarchy
587
+ 2. **Check focus management** - Ensure focus is properly managed during state changes
588
+ 3. **Test with screen readers** - Verify provider-managed content works with assistive technologies
589
+ 4. **Verify ARIA attributes** - Ensure providers set appropriate ARIA attributes
590
+ 5. **Test keyboard navigation** - Verify all provider-managed interactions are keyboard accessible
591
+
592
+ ## ⚠️ Edge Cases
593
+
594
+ ### Provider Initialization Failures
595
+
596
+ When providers fail to initialize:
597
+ - Verify all required props are provided
598
+ - Check Supabase client is properly configured
599
+ - Review provider dependencies and order
600
+ - Test with minimal configuration
601
+ - Verify environment variables are set correctly
602
+
603
+ ### Context Not Available
604
+
605
+ When provider context is not available:
606
+ - Verify provider is properly mounted in component tree
607
+ - Check provider order (UnifiedAuthProvider → OrganisationProvider → EventProvider)
608
+ - Review component hierarchy for missing providers
609
+ - Test with provider composition examples
610
+ - Verify hooks are called within provider context
611
+
612
+ ### State Synchronization Issues
613
+
614
+ When provider state is out of sync:
615
+ - Check for multiple provider instances
616
+ - Verify provider state updates correctly
617
+ - Review state management logic
618
+ - Test with rapid state changes
619
+ - Check for race conditions in state updates
620
+
621
+ ### Inactivity Tracking Edge Cases
622
+
623
+ When inactivity tracking fails:
624
+ - Verify mandatory props (idleTimeoutMs, warnBeforeMs, onIdleLogout) are provided
625
+ - Check localStorage is available and working
626
+ - Review cross-tab synchronization
627
+ - Test with different browser environments
628
+ - Verify inactivity events are properly monitored
629
+
575
630
  ## What's Next?
576
631
 
577
632
  - **[Components](./components.md)** - All UI components
@@ -0,0 +1,397 @@
1
+ ---
2
+ lastUpdated: 2025-11-18T12:00:00+11:00
3
+ version: 0.5.181
4
+ reviewedBy: documentation-standards-audit
5
+ ---
6
+
7
+ # RPC Functions API Reference
8
+
9
+ This document provides an overview of RPC (Remote Procedure Call) functions in `pace-core` and how to use them. RPC functions follow strict naming conventions and security standards as defined in the [API & RPC Standard](../standards/02-api-and-rpc-standard.md).
10
+
11
+ ## Overview
12
+
13
+ RPC functions are PostgreSQL functions that provide a secure, standardized way to interact with the database. They enforce Row Level Security (RLS), validate organisation context, and return consistent result shapes.
14
+
15
+ ## Naming Convention
16
+
17
+ All RPC functions follow the `<family>_<domain>_<verb>` pattern:
18
+
19
+ - **`data_*`** prefix for read operations (e.g., `data_file_reference_list`, `data_user_organisations_get`)
20
+ - **`app_*`** prefix for write operations (e.g., `app_cake_dish_create`, `app_file_reference_create`)
21
+ - **`rbac_*`** prefix for RBAC operations (exception to standard pattern, e.g., `rbac_permission_check`, `rbac_role_grant`)
22
+ - **`util_*`** prefix for utility functions (e.g., `util_app_resolve`)
23
+ - **CRUD verbs**: `create`, `read`, `get`, `list`, `update`, `delete`
24
+ - **Bulk operations**: Use `_bulk` suffix (e.g., `app_cake_dish_create_bulk`)
25
+
26
+ **Note**: The `rbac_*` prefix is an exception to the standard `data_*`/`app_*` pattern. RBAC functions use their own prefix for clarity and consistency within the RBAC system.
27
+
28
+ ### Examples
29
+
30
+ ```sql
31
+ -- Read operations (data_*)
32
+ data_file_reference_list(...)
33
+ data_file_reference_get(...)
34
+ data_cake_dishes_list(...)
35
+ data_event_list(...)
36
+
37
+ -- Write operations (app_*)
38
+ app_cake_dish_create(...)
39
+ app_file_reference_create(...)
40
+ app_cake_dish_update(...)
41
+ app_cake_dish_delete(...)
42
+
43
+ -- Bulk operations
44
+ app_cake_dish_create_bulk(...)
45
+ ```
46
+
47
+ ## Result Shape
48
+
49
+ RPC functions conceptually follow the `ApiResult<T>` shape as defined in the [API & RPC Standard](../standards/02-api-and-rpc-standard.md), but are wrapped by Supabase's client into the standard `{ data, error }` format:
50
+
51
+ ```typescript
52
+ // Conceptual ApiResult shape (from standard)
53
+ type ApiResult<T> =
54
+ | { ok: true; data: T }
55
+ | { ok: false; error: ApiError };
56
+
57
+ type ApiError = {
58
+ code: string;
59
+ message: string;
60
+ details?: object;
61
+ };
62
+
63
+ // Actual Supabase RPC response format
64
+ type SupabaseRPCResponse<T> = {
65
+ data: T | null;
66
+ error: PostgrestError | null;
67
+ };
68
+ ```
69
+
70
+ **Note**: Supabase RPCs return data directly (as TABLE or scalar types), and the Supabase client wraps them in `{ data, error }` format. Error handling should check the `error` field rather than expecting an `ApiResult` wrapper.
71
+
72
+ ### Usage Example
73
+
74
+ ```typescript
75
+ import { supabase } from './supabaseClient';
76
+
77
+ // Call RPC function
78
+ const { data, error } = await supabase.rpc('data_file_reference_list', {
79
+ p_table_name: 'pace_person',
80
+ p_record_id: personId,
81
+ p_organisation_id: orgId
82
+ });
83
+
84
+ if (error) {
85
+ // Handle error - Supabase wraps errors in the error field
86
+ console.error('RPC error:', error.message, error.code);
87
+ return;
88
+ }
89
+
90
+ // Use data - data is null if error occurred
91
+ if (data) {
92
+ const fileReferences = data;
93
+ }
94
+ ```
95
+
96
+ ## RPC Rules
97
+
98
+ As per the [API & RPC Standard](../standards/02-api-and-rpc-standard.md):
99
+
100
+ 1. **Read RPCs never mutate** - `data_*` functions are read-only
101
+ 2. **Write RPCs should be idempotent** - `app_*` functions can be safely retried
102
+ 3. **Never accept dynamic SQL** - All queries are parameterized
103
+ 4. **Must enforce RLS + tenant boundaries** - Organisation context is always validated
104
+ 5. **Errors must be user-safe** - No sensitive information in error messages
105
+
106
+ ## Core RPC Functions
107
+
108
+ ### File Reference System
109
+
110
+ Documented in [File Reference System Guide](../implementation-guides/file-reference-system.md):
111
+
112
+ **Note**: File reference RPCs use `data_*` prefix for all operations (including create/delete) as an exception to the standard naming pattern. This maintains consistency within the file reference system.
113
+
114
+ **Read Operations:**
115
+ - `data_file_reference_get` - Get a file reference by ID
116
+ - `data_file_reference_list` - List file references for a record
117
+ - `data_file_reference_url_get` - Get public URL for a file
118
+ - `data_file_reference_signed_url_get` - Get signed URL path for private files
119
+ - `data_file_reference_by_category_list` - List files by category
120
+ - `data_file_reference_count_get` - Get count of file references for a record
121
+
122
+ **Write Operations (exception to naming standard):**
123
+ - `data_file_reference_create` - Create a file reference (uses `data_*` prefix for consistency within file reference system)
124
+ - `data_file_reference_delete` - Delete a file reference (uses `data_*` prefix for consistency within file reference system)
125
+
126
+ ### RBAC System
127
+
128
+ Documented in [RBAC API Reference](../rbac/api-reference.md):
129
+
130
+ **Permission Checking:**
131
+ - `rbac_permission_check` - Check if user has a specific permission
132
+ - `rbac_permissions_get` - Get all permissions for current user in a scope
133
+ - `rbac_access_validate` - Validate user access to a resource
134
+ - `rbac_page_access_check` - Check page-level access permissions
135
+
136
+ **Role Management:**
137
+ - `rbac_role_grant` - Grant a role to a user
138
+ - `rbac_role_revoke` - Revoke a role from a user
139
+ - `rbac_roles_list` - List available roles
140
+ - `rbac_role_validate` - Validate role configuration
141
+
142
+ **Session & Audit:**
143
+ - `rbac_session_track` - Track user session activity
144
+ - `rbac_audit_log` - Log RBAC-related actions
145
+
146
+ **Data Access (RBAC-protected):**
147
+ - `data_user_organisations_get` - Get all organisations for a user
148
+ - `data_user_organisation_roles_get` - Get user roles in organisations
149
+ - `data_user_events_get` - Get events accessible to a user
150
+ - `data_cake_meals_get` - Get cake meals for an event (application-specific, RBAC-protected)
151
+
152
+ **Additional RBAC Functions:**
153
+ - `rbac_check_permission_simplified` - Simplified permission check (event-scoped)
154
+ - `rbac_check_distribution_or_page_permission` - Check distribution or page permissions
155
+
156
+ **Utility:**
157
+ - `util_app_resolve` - Resolve app ID from app name
158
+ - `util_get_cake_app_id` - Get CAKE app ID (application-specific utility)
159
+ - `debug_auth_context` - Debug authentication context (development only)
160
+ - `handle_new_user` - Handle new user registration (triggered automatically)
161
+
162
+ ### Event System
163
+
164
+ - `data_user_events_get` - Get events accessible to a user (replaces deprecated `get_pace_user_events`)
165
+ - `get_public_event_by_code` - Get public event by code (public access, exception to naming pattern)
166
+ - `data_event_list` - List events (if implemented)
167
+ - `app_event_create` - Create an event (if implemented)
168
+
169
+ **Note**: `get_public_event_by_code` is a legacy function that doesn't follow the standard naming pattern. It's maintained for backward compatibility with public pages.
170
+
171
+ ## Application-Specific RPCs
172
+
173
+ Each application may define its own RPC functions following the naming convention. Common patterns include:
174
+
175
+ ### Cake Application Example
176
+
177
+ ```sql
178
+ -- Read operations
179
+ data_cake_dishes_list(p_organisation_id UUID, p_event_id UUID)
180
+ data_cake_diner_get(p_diner_id UUID, p_organisation_id UUID)
181
+ data_cake_diners_list(p_organisation_id UUID, p_event_id UUID)
182
+
183
+ -- Write operations
184
+ app_cake_dish_create(p_organisation_id UUID, p_event_id UUID, p_data JSONB)
185
+ app_cake_dish_update(p_dish_id UUID, p_organisation_id UUID, p_data JSONB)
186
+ app_cake_dish_delete(p_dish_id UUID, p_organisation_id UUID)
187
+
188
+ -- Bulk operations
189
+ app_cake_dish_create_bulk(p_organisation_id UUID, p_event_id UUID, p_data JSONB[])
190
+ ```
191
+
192
+ ## Finding RPC Functions
193
+
194
+ ### In Supabase Dashboard
195
+
196
+ 1. Navigate to **Database** → **Functions**
197
+ 2. Filter by prefix (`data_`, `app_`, `rbac_`, or `util_`)
198
+ 3. Review function signatures and documentation
199
+
200
+ ### In Migration Files
201
+
202
+ RPC functions are defined in Supabase migration files:
203
+
204
+ ```bash
205
+ supabase/migrations/YYYYMMDDHHMMSS_description.sql
206
+ ```
207
+
208
+ Search for `CREATE OR REPLACE FUNCTION` statements:
209
+
210
+ ```sql
211
+ CREATE OR REPLACE FUNCTION data_file_reference_list(
212
+ p_table_name TEXT,
213
+ p_record_id TEXT,
214
+ p_organisation_id UUID
215
+ )
216
+ RETURNS TABLE(...)
217
+ LANGUAGE plpgsql
218
+ SECURITY DEFINER
219
+ SET search_path = public
220
+ AS $$
221
+ BEGIN
222
+ -- Function implementation
223
+ END;
224
+ $$;
225
+ ```
226
+
227
+ ## Security Considerations
228
+
229
+ ### Organisation Context
230
+
231
+ All RPC functions validate organisation context:
232
+
233
+ ```sql
234
+ -- Functions check organisation membership
235
+ IF NOT EXISTS (
236
+ SELECT 1 FROM user_organisation_memberships
237
+ WHERE user_id = auth.uid()
238
+ AND organisation_id = p_organisation_id
239
+ ) THEN
240
+ RAISE EXCEPTION 'Access denied';
241
+ END IF;
242
+ ```
243
+
244
+ ### RLS Enforcement
245
+
246
+ RPC functions run with `SECURITY DEFINER` but still respect RLS policies:
247
+
248
+ - Functions validate organisation membership
249
+ - Functions check user permissions
250
+ - Direct table access is protected by RLS
251
+
252
+ ### Error Handling
253
+
254
+ RPC functions return user-safe errors:
255
+
256
+ ```sql
257
+ BEGIN
258
+ -- Validation
259
+ IF p_organisation_id IS NULL THEN
260
+ RAISE EXCEPTION 'Organisation ID is required';
261
+ END IF;
262
+
263
+ -- Business logic
264
+ -- ...
265
+
266
+ EXCEPTION
267
+ WHEN OTHERS THEN
268
+ RAISE EXCEPTION 'Operation failed: %', SQLERRM;
269
+ END;
270
+ ```
271
+
272
+ ## Best Practices
273
+
274
+ ### 1. Always Pass Organisation Context
275
+
276
+ ```typescript
277
+ // ✅ Good
278
+ const { data, error } = await supabase.rpc('data_file_reference_list', {
279
+ p_table_name: 'pace_person',
280
+ p_record_id: personId,
281
+ p_organisation_id: currentOrganisationId // Always include
282
+ });
283
+
284
+ if (error) {
285
+ console.error('Failed to list file references:', error);
286
+ return;
287
+ }
288
+
289
+ // Use data
290
+ const fileReferences = data;
291
+
292
+ // ❌ Bad - Missing organisation context
293
+ const { data, error } = await supabase.rpc('data_file_reference_list', {
294
+ p_table_name: 'pace_person',
295
+ p_record_id: personId
296
+ // Missing p_organisation_id - will fail RLS validation
297
+ });
298
+ ```
299
+
300
+ ### 2. Handle Errors Properly
301
+
302
+ ```typescript
303
+ const { data, error } = await supabase.rpc('app_cake_dish_create', {
304
+ p_organisation_id: orgId,
305
+ p_event_id: eventId,
306
+ p_data: dishData
307
+ });
308
+
309
+ if (error) {
310
+ // Check error code
311
+ if (error.code === 'PGRST301' || error.message?.includes('Access denied')) {
312
+ // Handle permission error
313
+ toast.error('You do not have permission to create dishes');
314
+ } else {
315
+ // Handle other errors
316
+ toast.error('Failed to create dish');
317
+ }
318
+ return;
319
+ }
320
+
321
+ // Use data
322
+ const newDish = data;
323
+ ```
324
+
325
+ ### 3. Use TypeScript Types
326
+
327
+ ```typescript
328
+ // Define RPC result types
329
+ type FileReferenceListResult = {
330
+ id: string;
331
+ table_name: string;
332
+ record_id: string;
333
+ file_path: string;
334
+ // ... other fields
335
+ }[];
336
+
337
+ const { data, error } = await supabase.rpc<FileReferenceListResult>(
338
+ 'data_file_reference_list',
339
+ {
340
+ p_table_name: 'pace_person',
341
+ p_record_id: personId,
342
+ p_organisation_id: orgId
343
+ }
344
+ );
345
+
346
+ if (error) {
347
+ console.error('RPC error:', error);
348
+ return;
349
+ }
350
+
351
+ // TypeScript now knows the shape of data
352
+ if (data) {
353
+ data.forEach(ref => {
354
+ console.log(ref.file_path); // Type-safe access
355
+ });
356
+ }
357
+ ```
358
+
359
+ ### 4. Prefer RPCs Over Direct Queries
360
+
361
+ ```typescript
362
+ // ✅ Good - Use RPC function with proper error handling
363
+ const { data, error } = await supabase.rpc('data_file_reference_list', {
364
+ p_table_name: 'pace_person',
365
+ p_record_id: personId,
366
+ p_organisation_id: orgId
367
+ });
368
+
369
+ if (error) {
370
+ console.error('Failed to list file references:', error);
371
+ return;
372
+ }
373
+
374
+ // Use data - RPC enforces RLS and organisation context
375
+ const fileReferences = data;
376
+
377
+ // ❌ Bad - Direct query bypasses RLS validation and organisation checks
378
+ const { data, error } = await supabase
379
+ .from('file_references')
380
+ .select('*')
381
+ .eq('table_name', 'pace_person')
382
+ .eq('record_id', personId);
383
+ // Missing organisation context validation
384
+ // May expose data from other organisations
385
+ ```
386
+
387
+ ## Deprecated RPCs
388
+
389
+ See [Deprecated APIs](./deprecated.md) for RPC functions that are deprecated and their migration paths.
390
+
391
+ ## Related Documentation
392
+
393
+ - [API & RPC Standard](../standards/02-api-and-rpc-standard.md) - Complete RPC standards
394
+ - [File Reference System](../implementation-guides/file-reference-system.md) - File reference RPCs
395
+ - [RBAC API Reference](../rbac/api-reference.md) - RBAC RPC functions
396
+ - [Database Schema Requirements](../architecture/database-schema-requirements.md) - Required RPC functions
397
+