@jmruthers/pace-core 0.6.2 → 0.6.4

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 (299) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/cursor-rules/00-pace-core-compliance.mdc +34 -2
  3. package/dist/{AuthService-BPvc3Ka0.d.ts → AuthService-Cb34EQs3.d.ts} +9 -1
  4. package/dist/{DataTable-TPTKCX4D.js → DataTable-E7YQZD7D.js} +9 -8
  5. package/dist/{PublicPageProvider-DC6kCaqf.d.ts → PublicPageProvider-DEMpysFR.d.ts} +45 -67
  6. package/dist/{UnifiedAuthProvider-CVcTjx-d.d.ts → UnifiedAuthProvider-CKvHP1MK.d.ts} +1 -8
  7. package/dist/{UnifiedAuthProvider-CH6Z342H.js → UnifiedAuthProvider-QPXO24B4.js} +5 -4
  8. package/dist/{api-MVVQZLJI.js → api-6LVZTHDS.js} +10 -10
  9. package/dist/{audit-B5P6FFIR.js → audit-V53FV5AG.js} +2 -2
  10. package/dist/chunk-36LVWXB2.js +227 -0
  11. package/dist/chunk-36LVWXB2.js.map +1 -0
  12. package/dist/{chunk-24UVZUZG.js → chunk-3LPHPB62.js} +129 -387
  13. package/dist/chunk-3LPHPB62.js.map +1 -0
  14. package/dist/{chunk-2UOI2FG5.js → chunk-5EC5MEWX.js} +4 -4
  15. package/dist/{chunk-3XC4CPTD.js → chunk-7JPAB3T5.js} +244 -5727
  16. package/dist/chunk-7JPAB3T5.js.map +1 -0
  17. package/dist/{chunk-6J4GEEJR.js → chunk-ATKZM7RX.js} +53 -27
  18. package/dist/chunk-ATKZM7RX.js.map +1 -0
  19. package/dist/{chunk-EHMR7VYL.js → chunk-AVMLPIM7.js} +443 -189
  20. package/dist/chunk-AVMLPIM7.js.map +1 -0
  21. package/dist/chunk-DGUM43GV.js +11 -0
  22. package/dist/{chunk-NECFR5MM.js → chunk-I6DAQMWX.js} +575 -647
  23. package/dist/chunk-I6DAQMWX.js.map +1 -0
  24. package/dist/{chunk-F2IMUDXZ.js → chunk-M7MPQISP.js} +2 -2
  25. package/dist/{chunk-XWQCNGTQ.js → chunk-NN6WWZ5U.js} +173 -79
  26. package/dist/chunk-NN6WWZ5U.js.map +1 -0
  27. package/dist/{chunk-MMZ7JXPU.js → chunk-OEWDTMG7.js} +13 -21
  28. package/dist/{chunk-MMZ7JXPU.js.map → chunk-OEWDTMG7.js.map} +1 -1
  29. package/dist/{chunk-SFZUDBL5.js → chunk-YKRAFF5K.js} +70 -56
  30. package/dist/chunk-YKRAFF5K.js.map +1 -0
  31. package/dist/components.d.ts +2 -2
  32. package/dist/components.js +12 -13
  33. package/dist/contextValidator-OOPCLPZW.js +9 -0
  34. package/dist/contextValidator-OOPCLPZW.js.map +1 -0
  35. package/dist/eslint-rules/pace-core-compliance.cjs +106 -0
  36. package/dist/hooks.d.ts +2 -2
  37. package/dist/hooks.js +7 -6
  38. package/dist/hooks.js.map +1 -1
  39. package/dist/index.d.ts +7 -7
  40. package/dist/index.js +21 -16
  41. package/dist/index.js.map +1 -1
  42. package/dist/providers.d.ts +3 -3
  43. package/dist/providers.js +4 -3
  44. package/dist/rbac/index.d.ts +67 -27
  45. package/dist/rbac/index.js +15 -8
  46. package/dist/styles/index.js +1 -1
  47. package/dist/theming/runtime.js +1 -1
  48. package/dist/types.js +1 -1
  49. package/dist/{usePublicRouteParams-1oMokgLF.d.ts → usePublicRouteParams-i3qtoBgg.d.ts} +7 -16
  50. package/dist/utils.js +5 -7
  51. package/dist/utils.js.map +1 -1
  52. package/docs/api/README.md +14 -16
  53. package/docs/api/modules.md +3796 -2513
  54. package/docs/components/context-selector.md +126 -0
  55. package/docs/migration/RBAC_SCOPE_MIGRATION.md +385 -0
  56. package/docs/pace-mint-fix-auto-selection.md +218 -0
  57. package/docs/pace-mint-rbac-setup.md +391 -0
  58. package/docs/rbac/secure-client-protection.md +330 -0
  59. package/package.json +10 -5
  60. package/scripts/audit/core/checks/compliance.cjs +72 -0
  61. package/scripts/audit/core/checks/dependencies.cjs +568 -28
  62. package/scripts/audit/core/checks/documentation.cjs +68 -3
  63. package/scripts/audit/core/checks/environment.cjs +2 -14
  64. package/scripts/audit/core/checks/error-handling.cjs +47 -6
  65. package/src/components/ContextSelector/ContextSelector.tsx +384 -0
  66. package/src/components/ContextSelector/index.ts +3 -0
  67. package/src/components/DataTable/components/RowComponent.tsx +19 -19
  68. package/src/components/DataTable/components/UnifiedTableBody.tsx +2 -2
  69. package/src/components/DataTable/hooks/useDataTablePermissions.ts +8 -6
  70. package/src/components/Dialog/Dialog.tsx +29 -1
  71. package/src/components/FileDisplay/FileDisplay.tsx +42 -10
  72. package/src/components/Header/Header.test.tsx +43 -73
  73. package/src/components/Header/Header.tsx +44 -45
  74. package/src/components/PaceAppLayout/PaceAppLayout.integration.test.tsx +10 -19
  75. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +2 -2
  76. package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +5 -5
  77. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +9 -9
  78. package/src/components/PaceAppLayout/PaceAppLayout.tsx +157 -36
  79. package/src/components/PaceAppLayout/README.md +14 -17
  80. package/src/components/PaceAppLayout/test-setup.tsx +2 -2
  81. package/src/components/index.ts +5 -5
  82. package/src/eslint-rules/pace-core-compliance.cjs +106 -0
  83. package/src/hooks/__tests__/useAppConfig.unit.test.ts +4 -98
  84. package/src/hooks/useAppConfig.ts +15 -30
  85. package/src/hooks/useFileDisplay.ts +77 -50
  86. package/src/index.ts +4 -5
  87. package/src/providers/services/AuthServiceProvider.tsx +17 -7
  88. package/src/providers/services/EventServiceProvider.tsx +33 -5
  89. package/src/providers/services/UnifiedAuthProvider.tsx +90 -134
  90. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +1 -1
  91. package/src/rbac/adapters.tsx +2 -2
  92. package/src/rbac/api.test.ts +59 -51
  93. package/src/rbac/api.ts +178 -132
  94. package/src/rbac/components/PagePermissionGuard.tsx +38 -10
  95. package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +32 -21
  96. package/src/rbac/hooks/permissions/useAccessLevel.ts +1 -1
  97. package/src/rbac/hooks/permissions/useCan.ts +41 -11
  98. package/src/rbac/hooks/permissions/useHasAllPermissions.ts +1 -1
  99. package/src/rbac/hooks/permissions/useHasAnyPermission.ts +1 -1
  100. package/src/rbac/hooks/permissions/useMultiplePermissions.ts +1 -1
  101. package/src/rbac/hooks/useCan.test.ts +0 -9
  102. package/src/rbac/hooks/useRBAC.test.ts +1 -5
  103. package/src/rbac/hooks/useRBAC.ts +36 -37
  104. package/src/rbac/hooks/useResolvedScope.test.ts +120 -35
  105. package/src/rbac/hooks/useResolvedScope.ts +35 -40
  106. package/src/rbac/hooks/useSecureSupabase.ts +7 -7
  107. package/src/rbac/index.ts +7 -0
  108. package/src/rbac/secureClient.test.ts +22 -18
  109. package/src/rbac/secureClient.ts +103 -16
  110. package/src/rbac/security.ts +0 -17
  111. package/src/rbac/types.ts +1 -0
  112. package/src/rbac/utils/__tests__/contextValidator.test.ts +64 -86
  113. package/src/rbac/utils/clientSecurity.ts +93 -0
  114. package/src/rbac/utils/contextValidator.ts +77 -168
  115. package/src/services/AuthService.ts +39 -7
  116. package/src/services/EventService.ts +285 -56
  117. package/src/services/OrganisationService.ts +81 -14
  118. package/src/services/__tests__/EventService.test.ts +1 -2
  119. package/src/services/base/BaseService.ts +3 -0
  120. package/src/utils/dynamic/dynamicUtils.ts +7 -4
  121. package/dist/chunk-24UVZUZG.js.map +0 -1
  122. package/dist/chunk-3XC4CPTD.js.map +0 -1
  123. package/dist/chunk-6J4GEEJR.js.map +0 -1
  124. package/dist/chunk-7D4SUZUM.js +0 -38
  125. package/dist/chunk-EHMR7VYL.js.map +0 -1
  126. package/dist/chunk-NECFR5MM.js.map +0 -1
  127. package/dist/chunk-SFZUDBL5.js.map +0 -1
  128. package/dist/chunk-XWQCNGTQ.js.map +0 -1
  129. package/docs/api/classes/ColumnFactory.md +0 -243
  130. package/docs/api/classes/InvalidScopeError.md +0 -73
  131. package/docs/api/classes/Logger.md +0 -178
  132. package/docs/api/classes/MissingUserContextError.md +0 -66
  133. package/docs/api/classes/OrganisationContextRequiredError.md +0 -66
  134. package/docs/api/classes/PermissionDeniedError.md +0 -73
  135. package/docs/api/classes/RBACAuditManager.md +0 -297
  136. package/docs/api/classes/RBACCache.md +0 -322
  137. package/docs/api/classes/RBACEngine.md +0 -171
  138. package/docs/api/classes/RBACError.md +0 -76
  139. package/docs/api/classes/RBACNotInitializedError.md +0 -66
  140. package/docs/api/classes/SecureSupabaseClient.md +0 -163
  141. package/docs/api/classes/StorageUtils.md +0 -328
  142. package/docs/api/enums/FileCategory.md +0 -184
  143. package/docs/api/enums/LogLevel.md +0 -54
  144. package/docs/api/enums/RBACErrorCode.md +0 -228
  145. package/docs/api/enums/RPCFunction.md +0 -118
  146. package/docs/api/interfaces/AddressFieldProps.md +0 -241
  147. package/docs/api/interfaces/AddressFieldRef.md +0 -94
  148. package/docs/api/interfaces/AggregateConfig.md +0 -43
  149. package/docs/api/interfaces/AutocompleteOptions.md +0 -75
  150. package/docs/api/interfaces/AvatarProps.md +0 -128
  151. package/docs/api/interfaces/BadgeProps.md +0 -34
  152. package/docs/api/interfaces/ButtonProps.md +0 -56
  153. package/docs/api/interfaces/CalendarProps.md +0 -73
  154. package/docs/api/interfaces/CardProps.md +0 -69
  155. package/docs/api/interfaces/ColorPalette.md +0 -7
  156. package/docs/api/interfaces/ColorShade.md +0 -66
  157. package/docs/api/interfaces/ComplianceResult.md +0 -30
  158. package/docs/api/interfaces/DataAccessRecord.md +0 -96
  159. package/docs/api/interfaces/DataRecord.md +0 -11
  160. package/docs/api/interfaces/DataTableAction.md +0 -252
  161. package/docs/api/interfaces/DataTableColumn.md +0 -504
  162. package/docs/api/interfaces/DataTableProps.md +0 -625
  163. package/docs/api/interfaces/DataTableToolbarButton.md +0 -96
  164. package/docs/api/interfaces/DatabaseComplianceResult.md +0 -85
  165. package/docs/api/interfaces/DatabaseIssue.md +0 -41
  166. package/docs/api/interfaces/EmptyStateConfig.md +0 -61
  167. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +0 -235
  168. package/docs/api/interfaces/ErrorBoundaryProps.md +0 -147
  169. package/docs/api/interfaces/ErrorBoundaryProviderProps.md +0 -36
  170. package/docs/api/interfaces/ErrorBoundaryState.md +0 -75
  171. package/docs/api/interfaces/EventAppRoleData.md +0 -71
  172. package/docs/api/interfaces/ExportColumn.md +0 -90
  173. package/docs/api/interfaces/ExportOptions.md +0 -126
  174. package/docs/api/interfaces/FileDisplayProps.md +0 -249
  175. package/docs/api/interfaces/FileMetadata.md +0 -129
  176. package/docs/api/interfaces/FileReference.md +0 -118
  177. package/docs/api/interfaces/FileSizeLimits.md +0 -7
  178. package/docs/api/interfaces/FileUploadOptions.md +0 -139
  179. package/docs/api/interfaces/FileUploadProps.md +0 -296
  180. package/docs/api/interfaces/FooterProps.md +0 -107
  181. package/docs/api/interfaces/FormFieldProps.md +0 -166
  182. package/docs/api/interfaces/FormProps.md +0 -113
  183. package/docs/api/interfaces/GrantEventAppRoleParams.md +0 -122
  184. package/docs/api/interfaces/InactivityWarningModalProps.md +0 -115
  185. package/docs/api/interfaces/InputProps.md +0 -56
  186. package/docs/api/interfaces/LabelProps.md +0 -107
  187. package/docs/api/interfaces/LoggerConfig.md +0 -62
  188. package/docs/api/interfaces/LoginFormProps.md +0 -187
  189. package/docs/api/interfaces/NavigationAccessRecord.md +0 -107
  190. package/docs/api/interfaces/NavigationContextType.md +0 -164
  191. package/docs/api/interfaces/NavigationGuardProps.md +0 -139
  192. package/docs/api/interfaces/NavigationItem.md +0 -120
  193. package/docs/api/interfaces/NavigationMenuProps.md +0 -221
  194. package/docs/api/interfaces/NavigationProviderProps.md +0 -117
  195. package/docs/api/interfaces/Organisation.md +0 -140
  196. package/docs/api/interfaces/OrganisationContextType.md +0 -388
  197. package/docs/api/interfaces/OrganisationMembership.md +0 -140
  198. package/docs/api/interfaces/OrganisationProviderProps.md +0 -76
  199. package/docs/api/interfaces/OrganisationSecurityError.md +0 -62
  200. package/docs/api/interfaces/PaceAppLayoutProps.md +0 -409
  201. package/docs/api/interfaces/PaceLoginPageProps.md +0 -49
  202. package/docs/api/interfaces/PageAccessRecord.md +0 -85
  203. package/docs/api/interfaces/PagePermissionContextType.md +0 -140
  204. package/docs/api/interfaces/PagePermissionGuardProps.md +0 -153
  205. package/docs/api/interfaces/PagePermissionProviderProps.md +0 -119
  206. package/docs/api/interfaces/PaletteData.md +0 -41
  207. package/docs/api/interfaces/ParsedAddress.md +0 -120
  208. package/docs/api/interfaces/PermissionEnforcerProps.md +0 -153
  209. package/docs/api/interfaces/ProgressProps.md +0 -42
  210. package/docs/api/interfaces/ProtectedRouteProps.md +0 -78
  211. package/docs/api/interfaces/PublicPageFooterProps.md +0 -112
  212. package/docs/api/interfaces/PublicPageHeaderProps.md +0 -125
  213. package/docs/api/interfaces/PublicPageLayoutProps.md +0 -185
  214. package/docs/api/interfaces/QuickFix.md +0 -52
  215. package/docs/api/interfaces/RBACAccessValidateParams.md +0 -52
  216. package/docs/api/interfaces/RBACAccessValidateResult.md +0 -41
  217. package/docs/api/interfaces/RBACAuditLogParams.md +0 -85
  218. package/docs/api/interfaces/RBACAuditLogResult.md +0 -52
  219. package/docs/api/interfaces/RBACConfig.md +0 -133
  220. package/docs/api/interfaces/RBACContext.md +0 -52
  221. package/docs/api/interfaces/RBACLogger.md +0 -112
  222. package/docs/api/interfaces/RBACPageAccessCheckParams.md +0 -74
  223. package/docs/api/interfaces/RBACPerformanceMetrics.md +0 -138
  224. package/docs/api/interfaces/RBACPermissionCheckParams.md +0 -74
  225. package/docs/api/interfaces/RBACPermissionCheckResult.md +0 -52
  226. package/docs/api/interfaces/RBACPermissionsGetParams.md +0 -63
  227. package/docs/api/interfaces/RBACPermissionsGetResult.md +0 -63
  228. package/docs/api/interfaces/RBACResult.md +0 -58
  229. package/docs/api/interfaces/RBACRoleGrantParams.md +0 -63
  230. package/docs/api/interfaces/RBACRoleGrantResult.md +0 -52
  231. package/docs/api/interfaces/RBACRoleRevokeParams.md +0 -63
  232. package/docs/api/interfaces/RBACRoleRevokeResult.md +0 -52
  233. package/docs/api/interfaces/RBACRoleValidateParams.md +0 -52
  234. package/docs/api/interfaces/RBACRoleValidateResult.md +0 -63
  235. package/docs/api/interfaces/RBACRolesListParams.md +0 -52
  236. package/docs/api/interfaces/RBACRolesListResult.md +0 -74
  237. package/docs/api/interfaces/RBACSessionTrackParams.md +0 -74
  238. package/docs/api/interfaces/RBACSessionTrackResult.md +0 -52
  239. package/docs/api/interfaces/ResourcePermissions.md +0 -155
  240. package/docs/api/interfaces/RevokeEventAppRoleParams.md +0 -100
  241. package/docs/api/interfaces/RoleBasedRouterContextType.md +0 -151
  242. package/docs/api/interfaces/RoleBasedRouterProps.md +0 -156
  243. package/docs/api/interfaces/RoleManagementResult.md +0 -52
  244. package/docs/api/interfaces/RouteAccessRecord.md +0 -107
  245. package/docs/api/interfaces/RouteConfig.md +0 -134
  246. package/docs/api/interfaces/RuntimeComplianceResult.md +0 -55
  247. package/docs/api/interfaces/SecureDataContextType.md +0 -168
  248. package/docs/api/interfaces/SecureDataProviderProps.md +0 -132
  249. package/docs/api/interfaces/SessionRestorationLoaderProps.md +0 -34
  250. package/docs/api/interfaces/SetupIssue.md +0 -41
  251. package/docs/api/interfaces/StorageConfig.md +0 -41
  252. package/docs/api/interfaces/StorageFileInfo.md +0 -74
  253. package/docs/api/interfaces/StorageFileMetadata.md +0 -151
  254. package/docs/api/interfaces/StorageListOptions.md +0 -99
  255. package/docs/api/interfaces/StorageListResult.md +0 -41
  256. package/docs/api/interfaces/StorageUploadOptions.md +0 -101
  257. package/docs/api/interfaces/StorageUploadResult.md +0 -63
  258. package/docs/api/interfaces/StorageUrlOptions.md +0 -60
  259. package/docs/api/interfaces/StyleImport.md +0 -19
  260. package/docs/api/interfaces/SwitchProps.md +0 -34
  261. package/docs/api/interfaces/TabsContentProps.md +0 -9
  262. package/docs/api/interfaces/TabsListProps.md +0 -9
  263. package/docs/api/interfaces/TabsProps.md +0 -9
  264. package/docs/api/interfaces/TabsTriggerProps.md +0 -50
  265. package/docs/api/interfaces/TextareaProps.md +0 -53
  266. package/docs/api/interfaces/ToastActionElement.md +0 -12
  267. package/docs/api/interfaces/ToastProps.md +0 -9
  268. package/docs/api/interfaces/UnifiedAuthContextType.md +0 -823
  269. package/docs/api/interfaces/UnifiedAuthProviderProps.md +0 -173
  270. package/docs/api/interfaces/UseFormDialogOptions.md +0 -62
  271. package/docs/api/interfaces/UseFormDialogReturn.md +0 -117
  272. package/docs/api/interfaces/UseInactivityTrackerOptions.md +0 -138
  273. package/docs/api/interfaces/UseInactivityTrackerReturn.md +0 -123
  274. package/docs/api/interfaces/UsePublicEventLogoOptions.md +0 -87
  275. package/docs/api/interfaces/UsePublicEventLogoReturn.md +0 -84
  276. package/docs/api/interfaces/UsePublicEventOptions.md +0 -34
  277. package/docs/api/interfaces/UsePublicEventReturn.md +0 -71
  278. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +0 -47
  279. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +0 -123
  280. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +0 -97
  281. package/docs/api/interfaces/UseResolvedScopeOptions.md +0 -47
  282. package/docs/api/interfaces/UseResolvedScopeReturn.md +0 -47
  283. package/docs/api/interfaces/UseResourcePermissionsOptions.md +0 -34
  284. package/docs/api/interfaces/UserEventAccess.md +0 -121
  285. package/docs/api/interfaces/UserMenuProps.md +0 -88
  286. package/docs/api/interfaces/UserProfile.md +0 -63
  287. package/src/components/EventSelector/EventSelector.test.tsx +0 -720
  288. package/src/components/EventSelector/EventSelector.tsx +0 -423
  289. package/src/components/EventSelector/index.ts +0 -3
  290. package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +0 -784
  291. package/src/components/OrganisationSelector/OrganisationSelector.tsx +0 -327
  292. package/src/components/OrganisationSelector/index.ts +0 -9
  293. /package/dist/{DataTable-TPTKCX4D.js.map → DataTable-E7YQZD7D.js.map} +0 -0
  294. /package/dist/{UnifiedAuthProvider-CH6Z342H.js.map → UnifiedAuthProvider-QPXO24B4.js.map} +0 -0
  295. /package/dist/{api-MVVQZLJI.js.map → api-6LVZTHDS.js.map} +0 -0
  296. /package/dist/{audit-B5P6FFIR.js.map → audit-V53FV5AG.js.map} +0 -0
  297. /package/dist/{chunk-2UOI2FG5.js.map → chunk-5EC5MEWX.js.map} +0 -0
  298. /package/dist/{chunk-7D4SUZUM.js.map → chunk-DGUM43GV.js.map} +0 -0
  299. /package/dist/{chunk-F2IMUDXZ.js.map → chunk-M7MPQISP.js.map} +0 -0
@@ -7,25 +7,6 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
7
7
  import React__default, { ReactNode } from 'react';
8
8
  import '../core-CUElvH_C.js';
9
9
 
10
- /**
11
- * Context Validator for RBAC
12
- * @package @jmruthers/pace-core
13
- * @module RBAC/ContextValidator
14
- * @since 1.0.0
15
- *
16
- * Centralized validation for RBAC context requirements based on app configuration.
17
- * Enforces app-specific context rules with single primary context:
18
- * - requires_event = TRUE: Event is PRIMARY context, org derived from event (org not required in input)
19
- * - requires_event = FALSE: Organisation is PRIMARY context, event optional
20
- * - PORTAL/ADMIN apps: Both contexts optional (allows users to view/edit own profiles, super admin access)
21
- *
22
- * Key principle: Only one primary context is required based on app config. The other is derived or optional.
23
- */
24
-
25
- interface AppConfig {
26
- requires_event: boolean;
27
- }
28
-
29
10
  /**
30
11
  * RBAC Security Enhancements
31
12
  * @package @jmruthers/pace-core
@@ -137,6 +118,7 @@ declare class SecureSupabaseClient {
137
118
  private appId?;
138
119
  private isSuperAdmin;
139
120
  private usesExistingClient;
121
+ private static rpcSignatureCache;
140
122
  /**
141
123
  * RPC functions that are safe to call without organisation context.
142
124
  *
@@ -236,6 +218,18 @@ declare class SecureSupabaseClient {
236
218
  * @internal
237
219
  */
238
220
  getClient(): SupabaseClient<Database>;
221
+ /**
222
+ * Get the set of parameter names that an RPC function accepts.
223
+ * Uses a static whitelist of RPCs that we know accept context parameters.
224
+ *
225
+ * This is an opt-in approach: by default, we don't inject context unless
226
+ * the function is explicitly whitelisted. This prevents PGRST202 errors from
227
+ * injecting unexpected parameters.
228
+ *
229
+ * @param fn - The RPC function name
230
+ * @returns Set of parameter names the function accepts
231
+ */
232
+ private getRpcAcceptedParams;
239
233
  }
240
234
  /**
241
235
  * Create a secure Supabase client with organisation context
@@ -282,6 +276,53 @@ declare function createSecureClient(supabaseUrl: string, supabaseKey: string, or
282
276
  */
283
277
  declare function fromSupabaseClient(client: SupabaseClient<Database>, organisationId: UUID | null, eventId?: string, appId?: UUID, isSuperAdmin?: boolean): SecureSupabaseClient;
284
278
 
279
+ /**
280
+ * Client Security Detection Utilities
281
+ * @package @jmruthers/pace-core
282
+ * @module RBAC/Utils/ClientSecurity
283
+ * @since 1.0.0
284
+ *
285
+ * Utilities to detect and warn about insecure Supabase client usage.
286
+ */
287
+
288
+ /**
289
+ * Symbol to mark secure clients
290
+ * This is attached to clients created by SecureSupabaseClient
291
+ */
292
+ declare const SECURE_CLIENT_SYMBOL: unique symbol;
293
+ /**
294
+ * Check if a Supabase client is a secure client (created via useSecureSupabase or createSecureClient)
295
+ *
296
+ * @param client - The Supabase client to check
297
+ * @returns true if the client is secure, false otherwise
298
+ *
299
+ * @example
300
+ * ```tsx
301
+ * import { isSecureClient } from '@jmruthers/pace-core/rbac/utils/clientSecurity';
302
+ *
303
+ * const supabase = useSecureSupabase();
304
+ * if (isSecureClient(supabase)) {
305
+ * // Client is secure, safe to use
306
+ * }
307
+ * ```
308
+ */
309
+ declare function isSecureClient(client: SupabaseClient<Database> | null | undefined): boolean;
310
+ /**
311
+ * Warn about insecure client usage in development
312
+ *
313
+ * @param client - The client being used
314
+ * @param context - Context about where the client is being used (for better error messages)
315
+ *
316
+ * @example
317
+ * ```tsx
318
+ * import { warnIfInsecureClient } from '@jmruthers/pace-core/rbac/utils/clientSecurity';
319
+ *
320
+ * const supabase = createClient(...); // Wrong!
321
+ * warnIfInsecureClient(supabase, 'MyComponent');
322
+ * ```
323
+ */
324
+ declare function warnIfInsecureClient(client: SupabaseClient<Database> | null | undefined, context?: string): void;
325
+
285
326
  /**
286
327
  * RBAC Cache Implementation
287
328
  * @package @jmruthers/pace-core
@@ -2233,7 +2274,7 @@ declare function setupRBAC(supabase: SupabaseClient<Database>, config?: Partial<
2233
2274
  declare function getAccessLevel(input: {
2234
2275
  userId: UUID;
2235
2276
  scope: Scope;
2236
- }, appConfig?: AppConfig | null, appName?: string): Promise<AccessLevel>;
2277
+ }, appName?: string): Promise<AccessLevel>;
2237
2278
  /**
2238
2279
  * Get user's permission map for a scope
2239
2280
  *
@@ -2257,7 +2298,7 @@ declare function getAccessLevel(input: {
2257
2298
  declare function getPermissionMap(input: {
2258
2299
  userId: UUID;
2259
2300
  scope: Scope;
2260
- }, appConfig?: AppConfig | null, appName?: string): Promise<PermissionMap>;
2301
+ }, appName?: string): Promise<PermissionMap>;
2261
2302
  declare function resolveAppContext(input: {
2262
2303
  userId: UUID;
2263
2304
  appName: string;
@@ -2265,7 +2306,7 @@ declare function resolveAppContext(input: {
2265
2306
  declare function getRoleContext(input: {
2266
2307
  userId: UUID;
2267
2308
  scope: Scope;
2268
- }, appConfig?: AppConfig | null, appName?: string): Promise<RBACRoleContext>;
2309
+ }, appName?: string): Promise<RBACRoleContext>;
2269
2310
  /**
2270
2311
  * Check if user has a specific permission
2271
2312
  *
@@ -2284,7 +2325,7 @@ declare function getRoleContext(input: {
2284
2325
  * });
2285
2326
  * ```
2286
2327
  */
2287
- declare function isPermitted(input: PermissionCheck, appConfig?: AppConfig | null, appName?: string,
2328
+ declare function isPermitted(input: PermissionCheck, appName?: string,
2288
2329
  /**
2289
2330
  * Pre-computed super admin status to avoid duplicate checks.
2290
2331
  * Pass null if not checked yet (will check), true if already checked and is super admin,
@@ -2299,11 +2340,10 @@ precomputedSuperAdmin?: boolean | null): Promise<boolean>;
2299
2340
  * and checks cache before making new requests. Uses session cache for page-level checks.
2300
2341
  *
2301
2342
  * @param input - Permission check input
2302
- * @param appConfig - Optional app configuration
2303
- * @param appName - Optional app name
2343
+ * @param appName - Optional app name (for PORTAL/ADMIN special case)
2304
2344
  * @returns Promise resolving to permission result
2305
2345
  */
2306
- declare function isPermittedCached(input: PermissionCheck, appConfig?: AppConfig | null, appName?: string): Promise<boolean>;
2346
+ declare function isPermittedCached(input: PermissionCheck, appName?: string): Promise<boolean>;
2307
2347
  /**
2308
2348
  * Check if a user has a specific permission (alias for isPermitted)
2309
2349
  *
@@ -2640,4 +2680,4 @@ declare function getDirectSupabaseAuthFixes(): QuickFix;
2640
2680
  */
2641
2681
  declare function getQuickFixes(issueType: string, details?: Record<string, any>): QuickFix[];
2642
2682
 
2643
- export { ALL_PERMISSIONS, AccessLevel, AccessLevelGuard, type AllPermissions, CACHE_PATTERNS, type ComplianceResult, type DataAccessRecord, type DatabaseComplianceResult, type DatabaseIssue, EVENT_APP_PERMISSIONS, EnhancedNavigationMenu, type EnhancedNavigationMenuProps, type EventAppRoleData, GLOBAL_PERMISSIONS, type GrantEventAppRoleParams, type LogLevel, type NavigationAccessRecord, type NavigationContextType, NavigationGuard, type NavigationGuardProps, type NavigationItem, NavigationProvider, type NavigationProviderProps, ORGANISATION_PERMISSIONS, PAGE_PERMISSIONS, type PageAccessRecord, type PagePermissionContextType, PagePermissionGuard, type PagePermissionGuardProps, PagePermissionProvider, type PagePermissionProviderProps, Permission, PermissionCheck, PermissionEnforcer, type PermissionEnforcerProps, PermissionGuard, PermissionMap, type QuickFix, RBACAuditManager, RBACCache, type RBACConfig, RBACEngine, type RBACLogger, type RBACPerformanceMetrics, type ResourcePermissions, type RevokeEventAppRoleParams, RoleBasedRouter, type RoleBasedRouterContextType, type RoleBasedRouterProps, type RoleManagementResult, type RouteAccessRecord, type RouteConfig, type RuntimeComplianceResult, Scope, type SecureDataContextType, SecureDataProvider, type SecureDataProviderProps, SecureSupabaseClient, type SetupIssue, UUID, type UseResolvedScopeOptions, type UseResolvedScopeReturn, type UseResourcePermissionsOptions, checkRuntimeCompliance, clearInFlightRequests, createAuditManager, createRBACConfig, createRBACEngine, createRBACExpressMiddleware, createRBACMiddleware, createSecureClient, disablePerformanceMonitoring, emitAuditEvent, enablePerformanceMonitoring, fromSupabaseClient, getAccessLevel, getCustomAuthCodeFixes, getDirectSupabaseAuthFixes, getDuplicateConfigFixes, getGlobalAuditManager, getInFlightRequestCount, getPerformanceMetrics, getPerformanceSummary, getPermissionMap, getQuickFixes, getRBACConfig, getRBACLogger, getRoleContext, getSetupIssues, getUnprotectedPageFixes, hasAllPermissions, hasAnyPermission, hasAnyPermissionCached, hasPermission, hasPermissionCached, isDebugMode, isDevelopmentMode, isPerformanceMonitoringEnabled, isPermitted, isPermittedCached, isRBACInitialized, isValidPermission, rbacCache, recordAuditEvent, recordPermissionCheck, resetPerformanceMetrics, resolveAppContext, setGlobalAuditManager, setupRBAC, useAccessLevel, useCachedPermissions, useCan, useHasAllPermissions, useHasAnyPermission, useMultiplePermissions, useNavigationPermissions, usePagePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleBasedRouter, useRoleManagement, useSecureData, useSecureSupabase, validateAndWarn, validateDatabaseConfiguration, validateRBACSetup, withAccessLevelGuard, withPermissionGuard, withRoleGuard };
2683
+ export { ALL_PERMISSIONS, AccessLevel, AccessLevelGuard, type AllPermissions, CACHE_PATTERNS, type ComplianceResult, type DataAccessRecord, type DatabaseComplianceResult, type DatabaseIssue, EVENT_APP_PERMISSIONS, EnhancedNavigationMenu, type EnhancedNavigationMenuProps, type EventAppRoleData, GLOBAL_PERMISSIONS, type GrantEventAppRoleParams, type LogLevel, type NavigationAccessRecord, type NavigationContextType, NavigationGuard, type NavigationGuardProps, type NavigationItem, NavigationProvider, type NavigationProviderProps, ORGANISATION_PERMISSIONS, PAGE_PERMISSIONS, type PageAccessRecord, type PagePermissionContextType, PagePermissionGuard, type PagePermissionGuardProps, PagePermissionProvider, type PagePermissionProviderProps, Permission, PermissionCheck, PermissionEnforcer, type PermissionEnforcerProps, PermissionGuard, PermissionMap, type QuickFix, RBACAuditManager, RBACCache, type RBACConfig, RBACEngine, type RBACLogger, type RBACPerformanceMetrics, type ResourcePermissions, type RevokeEventAppRoleParams, RoleBasedRouter, type RoleBasedRouterContextType, type RoleBasedRouterProps, type RoleManagementResult, type RouteAccessRecord, type RouteConfig, type RuntimeComplianceResult, SECURE_CLIENT_SYMBOL, Scope, type SecureDataContextType, SecureDataProvider, type SecureDataProviderProps, SecureSupabaseClient, type SetupIssue, UUID, type UseResolvedScopeOptions, type UseResolvedScopeReturn, type UseResourcePermissionsOptions, checkRuntimeCompliance, clearInFlightRequests, createAuditManager, createRBACConfig, createRBACEngine, createRBACExpressMiddleware, createRBACMiddleware, createSecureClient, disablePerformanceMonitoring, emitAuditEvent, enablePerformanceMonitoring, fromSupabaseClient, getAccessLevel, getCustomAuthCodeFixes, getDirectSupabaseAuthFixes, getDuplicateConfigFixes, getGlobalAuditManager, getInFlightRequestCount, getPerformanceMetrics, getPerformanceSummary, getPermissionMap, getQuickFixes, getRBACConfig, getRBACLogger, getRoleContext, getSetupIssues, getUnprotectedPageFixes, hasAllPermissions, hasAnyPermission, hasAnyPermissionCached, hasPermission, hasPermissionCached, isDebugMode, isDevelopmentMode, isPerformanceMonitoringEnabled, isPermitted, isPermittedCached, isRBACInitialized, isSecureClient, isValidPermission, rbacCache, recordAuditEvent, recordPermissionCheck, resetPerformanceMetrics, resolveAppContext, setGlobalAuditManager, setupRBAC, useAccessLevel, useCachedPermissions, useCan, useHasAllPermissions, useHasAnyPermission, useMultiplePermissions, useNavigationPermissions, usePagePermissions, usePermissions, useRBAC, useResolvedScope, useResourcePermissions, useRoleBasedRouter, useRoleManagement, useSecureData, useSecureSupabase, validateAndWarn, validateDatabaseConfiguration, validateRBACSetup, warnIfInsecureClient, withAccessLevelGuard, withPermissionGuard, withRoleGuard };
@@ -39,11 +39,13 @@ import {
39
39
  withAccessLevelGuard,
40
40
  withPermissionGuard,
41
41
  withRoleGuard
42
- } from "../chunk-6J4GEEJR.js";
42
+ } from "../chunk-ATKZM7RX.js";
43
43
  import {
44
+ SECURE_CLIENT_SYMBOL,
44
45
  SecureSupabaseClient,
45
46
  createSecureClient,
46
47
  fromSupabaseClient,
48
+ isSecureClient,
47
49
  useAccessLevel,
48
50
  useCachedPermissions,
49
51
  useCan,
@@ -55,11 +57,12 @@ import {
55
57
  useResolvedScope,
56
58
  useResourcePermissions,
57
59
  useRoleManagement,
58
- useSecureSupabase
59
- } from "../chunk-XWQCNGTQ.js";
60
- import "../chunk-MMZ7JXPU.js";
60
+ useSecureSupabase,
61
+ warnIfInsecureClient
62
+ } from "../chunk-NN6WWZ5U.js";
63
+ import "../chunk-OEWDTMG7.js";
61
64
  import "../chunk-KQCRWDSA.js";
62
- import "../chunk-EHMR7VYL.js";
65
+ import "../chunk-AVMLPIM7.js";
63
66
  import {
64
67
  CACHE_PATTERNS,
65
68
  RBACCache,
@@ -91,7 +94,7 @@ import {
91
94
  resetPerformanceMetrics,
92
95
  resolveAppContext,
93
96
  setupRBAC
94
- } from "../chunk-24UVZUZG.js";
97
+ } from "../chunk-3LPHPB62.js";
95
98
  import {
96
99
  RBACAuditManager,
97
100
  createAuditManager,
@@ -99,12 +102,13 @@ import {
99
102
  getGlobalAuditManager,
100
103
  setGlobalAuditManager
101
104
  } from "../chunk-63FOKYGO.js";
105
+ import "../chunk-36LVWXB2.js";
102
106
  import "../chunk-QXHPKYJV.js";
103
- import "../chunk-F2IMUDXZ.js";
107
+ import "../chunk-M7MPQISP.js";
104
108
  import "../chunk-FMUCXFII.js";
105
109
  import "../chunk-VBXEHIUJ.js";
106
110
  import "../chunk-PWLANIRT.js";
107
- import "../chunk-7D4SUZUM.js";
111
+ import "../chunk-DGUM43GV.js";
108
112
  export {
109
113
  ALL_PERMISSIONS,
110
114
  AccessLevelGuard,
@@ -126,6 +130,7 @@ export {
126
130
  RBACErrorCode,
127
131
  RPCFunction,
128
132
  RoleBasedRouter,
133
+ SECURE_CLIENT_SYMBOL,
129
134
  SecureDataProvider,
130
135
  SecureSupabaseClient,
131
136
  checkRuntimeCompliance,
@@ -166,6 +171,7 @@ export {
166
171
  isPermitted,
167
172
  isPermittedCached,
168
173
  isRBACInitialized,
174
+ isSecureClient,
169
175
  isValidPermission,
170
176
  rbacCache,
171
177
  recordAuditEvent,
@@ -193,6 +199,7 @@ export {
193
199
  validateAndWarn,
194
200
  validateDatabaseConfiguration,
195
201
  validateRBACSetup,
202
+ warnIfInsecureClient,
196
203
  withAccessLevelGuard,
197
204
  withPermissionGuard,
198
205
  withRoleGuard
@@ -3,7 +3,7 @@ import {
3
3
  getStylePath,
4
4
  styleConfig
5
5
  } from "../chunk-5DRSZLL2.js";
6
- import "../chunk-7D4SUZUM.js";
6
+ import "../chunk-DGUM43GV.js";
7
7
  export {
8
8
  getAllStylePaths,
9
9
  getStylePath,
@@ -7,7 +7,7 @@ import {
7
7
  parseAndNormalizeEventColours
8
8
  } from "../chunk-L4OXEN46.js";
9
9
  import "../chunk-PWLANIRT.js";
10
- import "../chunk-7D4SUZUM.js";
10
+ import "../chunk-DGUM43GV.js";
11
11
  export {
12
12
  applyPalette,
13
13
  clearPalette,
package/dist/types.js CHANGED
@@ -44,7 +44,7 @@ import {
44
44
  urlSchema,
45
45
  userProfileSchema
46
46
  } from "./chunk-LMC26NLJ.js";
47
- import "./chunk-7D4SUZUM.js";
47
+ import "./chunk-DGUM43GV.js";
48
48
 
49
49
  // src/types/organisation.ts
50
50
  var ORGANISATION_ROLE_PERMISSIONS = {
@@ -232,34 +232,25 @@ declare const useOrganisationSecurity: () => OrganisationSecurityHook;
232
232
  * @module Hooks/useAppConfig
233
233
  * @since 0.4.0
234
234
  *
235
- * Hook for accessing app configuration like direct access support and event requirements.
236
- * This is a convenience hook that extracts app config from the UnifiedAuthProvider.
235
+ * Hook for accessing app name and loading state.
236
+ *
237
+ * NOTE: Scope configuration (requires_event) is now page-level only (rbac_app_pages.scope_type).
238
+ * Use getPageScopeType() to determine if a specific page requires event or organisation context.
237
239
  *
238
240
  * @example
239
241
  * ```tsx
240
242
  * function MyComponent() {
241
- * const { supportsDirectAccess, requiresEvent, isLoading } = useAppConfig();
243
+ * const { appName, isLoading } = useAppConfig();
242
244
  *
243
245
  * if (isLoading) return <div>Loading...</div>;
244
246
  *
245
- * return (
246
- * <div>
247
- * {supportsDirectAccess && (
248
- * <div>This app supports direct access!</div>
249
- * )}
250
- * {requiresEvent && (
251
- * <EventSelector />
252
- * )}
253
- * </div>
254
- * );
247
+ * return <div>App: {appName}</div>;
255
248
  * }
256
249
  * ```
257
250
  */
258
251
  interface UseAppConfigReturn {
259
- supportsDirectAccess: boolean;
260
- requiresEvent: boolean;
261
- isLoading: boolean;
262
252
  appName: string;
253
+ isLoading: boolean;
263
254
  }
264
255
  /**
265
256
  * Hook to access app configuration
package/dist/utils.js CHANGED
@@ -52,7 +52,7 @@ import {
52
52
  getCurrentAppName,
53
53
  getCurrentAppNameWithFallback,
54
54
  setRBACAppName
55
- } from "./chunk-F2IMUDXZ.js";
55
+ } from "./chunk-M7MPQISP.js";
56
56
  import {
57
57
  useComponentPerformance
58
58
  } from "./chunk-E66EQZE6.js";
@@ -97,7 +97,7 @@ import {
97
97
  createLogger,
98
98
  logger
99
99
  } from "./chunk-PWLANIRT.js";
100
- import "./chunk-7D4SUZUM.js";
100
+ import "./chunk-DGUM43GV.js";
101
101
 
102
102
  // src/utils/core/debugLogger.ts
103
103
  var DebugLogger = class {
@@ -881,10 +881,8 @@ function trackDynamicImport(moduleName) {
881
881
 
882
882
  // src/utils/dynamic/dynamicUtils.ts
883
883
  var loadLodash = async () => {
884
- const [debounceModule, throttleModule] = await Promise.all([
885
- import("lodash.debounce"),
886
- import("lodash.throttle")
887
- ]);
884
+ const debounceModule = await import("lodash.debounce");
885
+ const throttleModule = await import("lodash.throttle");
888
886
  return {
889
887
  debounce: debounceModule.default || debounceModule,
890
888
  throttle: throttleModule.default || throttleModule
@@ -953,7 +951,7 @@ function createLazyComponent(importFn, componentName, options = {}) {
953
951
  return WrappedComponent;
954
952
  }
955
953
  var LazyDataTable = createLazyComponent(
956
- () => import("./DataTable-TPTKCX4D.js").then((module) => ({ default: module.DataTable })),
954
+ () => import("./DataTable-E7YQZD7D.js").then((module) => ({ default: module.DataTable })),
957
955
  "DataTable"
958
956
  );
959
957