@jmruthers/pace-core 0.5.136 → 0.5.139

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 (292) hide show
  1. package/dist/{DataTable-CYOHOX3O.js → DataTable-JXFCA2BJ.js} +10 -9
  2. package/dist/{EventLogo-801uofbR.d.ts → EventLogo-rFL_kRjk.d.ts} +73 -1
  3. package/dist/{UnifiedAuthProvider-5E5TUNMS.js → UnifiedAuthProvider-XIQQ7LVU.js} +4 -5
  4. package/dist/{chunk-YLKIDTUK.js → chunk-22WKWKRX.js} +4 -4
  5. package/dist/{chunk-TVYPTYOY.js → chunk-4C7EXCAR.js} +60 -24
  6. package/dist/chunk-4C7EXCAR.js.map +1 -0
  7. package/dist/{chunk-NOHEVYVX.js → chunk-5JMOHWDI.js} +417 -319
  8. package/dist/chunk-5JMOHWDI.js.map +1 -0
  9. package/dist/{chunk-FHWWBIHA.js → chunk-6DXZ6V5Q.js} +5 -5
  10. package/dist/{chunk-2TWNJ46Y.js → chunk-6LAAY47Q.js} +2 -2
  11. package/dist/{chunk-444EZN6N.js → chunk-7QCC6MCP.js} +88 -1
  12. package/dist/chunk-7QCC6MCP.js.map +1 -0
  13. package/dist/chunk-BJPBT3CU.js +21 -0
  14. package/dist/chunk-BJPBT3CU.js.map +1 -0
  15. package/dist/{chunk-L6PGMCMD.js → chunk-BOOI7GK2.js} +38 -12
  16. package/dist/chunk-BOOI7GK2.js.map +1 -0
  17. package/dist/{chunk-XARJS7CD.js → chunk-INQLMHPF.js} +2 -2
  18. package/dist/chunk-JISYG63F.js +70 -0
  19. package/dist/chunk-JISYG63F.js.map +1 -0
  20. package/dist/{chunk-SL2YQDR6.js → chunk-MA6EPSGZ.js} +2 -2
  21. package/dist/{chunk-5DPZ5EAT.js → chunk-OWAG3GSU.js} +1 -3
  22. package/dist/{chunk-LTV3XIJJ.js → chunk-T6JN6LH6.js} +4 -4
  23. package/dist/{chunk-HJGGOMQ6.js → chunk-TLT2ZR3L.js} +147 -103
  24. package/dist/chunk-TLT2ZR3L.js.map +1 -0
  25. package/dist/{chunk-4MT5BGGL.js → chunk-YCWDTTUK.js} +4 -6
  26. package/dist/{chunk-4MT5BGGL.js.map → chunk-YCWDTTUK.js.map} +1 -1
  27. package/dist/components.d.ts +1 -1
  28. package/dist/components.js +12 -11
  29. package/dist/components.js.map +1 -1
  30. package/dist/hooks.js +8 -9
  31. package/dist/hooks.js.map +1 -1
  32. package/dist/index.d.ts +2 -2
  33. package/dist/index.js +15 -14
  34. package/dist/index.js.map +1 -1
  35. package/dist/providers.js +3 -4
  36. package/dist/rbac/index.js +8 -9
  37. package/dist/schema-DTDZQe2u.d.ts +28 -0
  38. package/dist/types.d.ts +152 -3
  39. package/dist/types.js +51 -16
  40. package/dist/types.js.map +1 -1
  41. package/dist/utils.d.ts +89 -4
  42. package/dist/utils.js +214 -96
  43. package/dist/utils.js.map +1 -1
  44. package/dist/validation.d.ts +1 -343
  45. package/dist/validation.js +3 -100
  46. package/docs/api/classes/ColumnFactory.md +1 -1
  47. package/docs/api/classes/ErrorBoundary.md +1 -1
  48. package/docs/api/classes/InvalidScopeError.md +1 -1
  49. package/docs/api/classes/MissingUserContextError.md +1 -1
  50. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  51. package/docs/api/classes/PermissionDeniedError.md +1 -1
  52. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  53. package/docs/api/classes/RBACAuditManager.md +1 -1
  54. package/docs/api/classes/RBACCache.md +1 -1
  55. package/docs/api/classes/RBACEngine.md +1 -1
  56. package/docs/api/classes/RBACError.md +1 -1
  57. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  58. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  59. package/docs/api/classes/StorageUtils.md +1 -1
  60. package/docs/api/enums/FileCategory.md +1 -1
  61. package/docs/api/interfaces/AggregateConfig.md +1 -1
  62. package/docs/api/interfaces/BadgeProps.md +27 -0
  63. package/docs/api/interfaces/ButtonProps.md +1 -1
  64. package/docs/api/interfaces/CardProps.md +1 -1
  65. package/docs/api/interfaces/ColorPalette.md +1 -1
  66. package/docs/api/interfaces/ColorShade.md +1 -1
  67. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  68. package/docs/api/interfaces/DataRecord.md +1 -1
  69. package/docs/api/interfaces/DataTableAction.md +1 -1
  70. package/docs/api/interfaces/DataTableColumn.md +1 -1
  71. package/docs/api/interfaces/DataTableProps.md +1 -1
  72. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  73. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  74. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  75. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  76. package/docs/api/interfaces/EventLogoProps.md +1 -1
  77. package/docs/api/interfaces/ExportColumn.md +1 -1
  78. package/docs/api/interfaces/ExportOptions.md +1 -1
  79. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  80. package/docs/api/interfaces/FileMetadata.md +1 -1
  81. package/docs/api/interfaces/FileReference.md +1 -1
  82. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  83. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  84. package/docs/api/interfaces/FileUploadProps.md +1 -1
  85. package/docs/api/interfaces/FooterProps.md +1 -1
  86. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  87. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  88. package/docs/api/interfaces/InputProps.md +1 -1
  89. package/docs/api/interfaces/LabelProps.md +1 -1
  90. package/docs/api/interfaces/LoginFormProps.md +1 -1
  91. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  92. package/docs/api/interfaces/NavigationContextType.md +1 -1
  93. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  94. package/docs/api/interfaces/NavigationItem.md +1 -1
  95. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  96. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  97. package/docs/api/interfaces/Organisation.md +1 -1
  98. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  99. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  100. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  101. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  102. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  103. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  104. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  105. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  106. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  107. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  108. package/docs/api/interfaces/PaletteData.md +1 -1
  109. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  110. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  111. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  112. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  113. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  114. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  115. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  116. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  117. package/docs/api/interfaces/RBACConfig.md +1 -1
  118. package/docs/api/interfaces/RBACLogger.md +1 -1
  119. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  120. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  121. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  122. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  123. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  124. package/docs/api/interfaces/RouteConfig.md +1 -1
  125. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  126. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  127. package/docs/api/interfaces/SessionRestorationLoaderProps.md +1 -1
  128. package/docs/api/interfaces/StorageConfig.md +1 -1
  129. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  130. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  131. package/docs/api/interfaces/StorageListOptions.md +1 -1
  132. package/docs/api/interfaces/StorageListResult.md +1 -1
  133. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  134. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  135. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  136. package/docs/api/interfaces/StyleImport.md +1 -1
  137. package/docs/api/interfaces/SwitchProps.md +1 -1
  138. package/docs/api/interfaces/ToastActionElement.md +1 -1
  139. package/docs/api/interfaces/ToastProps.md +1 -1
  140. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  141. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  142. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  143. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  144. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  145. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  146. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
  147. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  148. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  149. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  150. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  151. package/docs/api/interfaces/UserEventAccess.md +1 -1
  152. package/docs/api/interfaces/UserMenuProps.md +1 -1
  153. package/docs/api/interfaces/UserProfile.md +1 -1
  154. package/docs/api/modules.md +84 -15
  155. package/docs/architecture/README.md +0 -1
  156. package/docs/styles/README.md +0 -2
  157. package/examples/RBAC/CompleteRBACExample.tsx +324 -0
  158. package/examples/RBAC/EventBasedApp.tsx +239 -0
  159. package/examples/RBAC/PermissionExample.tsx +151 -0
  160. package/examples/RBAC/index.ts +13 -0
  161. package/examples/public-pages/CorrectPublicPageImplementation.tsx +301 -0
  162. package/examples/public-pages/PublicEventPage.tsx +274 -0
  163. package/examples/public-pages/PublicPageApp.tsx +308 -0
  164. package/examples/public-pages/PublicPageUsageExample.tsx +216 -0
  165. package/examples/public-pages/index.ts +14 -0
  166. package/package.json +1 -10
  167. package/src/__tests__/TEST_STANDARD.md +92 -0
  168. package/src/components/Badge/Badge.test.tsx +314 -0
  169. package/src/components/Badge/Badge.tsx +304 -0
  170. package/src/components/Badge/index.ts +3 -0
  171. package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +217 -0
  172. package/src/components/DataTable/__tests__/styles.test.ts +1 -1
  173. package/src/components/DataTable/components/ColumnFilter.tsx +8 -4
  174. package/src/components/DataTable/components/DataTableBody.tsx +461 -0
  175. package/src/components/DataTable/components/DraggableColumnHeader.tsx +144 -0
  176. package/src/components/DataTable/components/FilterRow.tsx +9 -3
  177. package/src/components/DataTable/components/PaginationControls.tsx +1 -0
  178. package/src/components/DataTable/components/VirtualizedDataTable.tsx +513 -0
  179. package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +14 -68
  180. package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +62 -0
  181. package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +43 -0
  182. package/src/components/DataTable/core/ActionManager.ts +235 -0
  183. package/src/components/DataTable/core/ColumnManager.ts +205 -0
  184. package/src/components/DataTable/core/DataManager.ts +188 -0
  185. package/src/components/DataTable/core/DataTableContext.tsx +181 -0
  186. package/src/components/DataTable/core/LocalDataAdapter.ts +273 -0
  187. package/src/components/DataTable/core/PluginRegistry.ts +229 -0
  188. package/src/components/DataTable/core/StateManager.ts +311 -0
  189. package/src/components/DataTable/core/interfaces.ts +338 -0
  190. package/src/components/DataTable/styles.ts +27 -6
  191. package/src/components/DataTable/utils/__tests__/columnUtils.test.ts +94 -0
  192. package/src/components/DataTable/utils/columnUtils.ts +40 -0
  193. package/src/components/DataTable/utils/debugTools.ts +609 -0
  194. package/src/components/DataTable/utils/index.ts +1 -0
  195. package/src/components/Dialog/README.md +804 -0
  196. package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +611 -0
  197. package/src/components/Dialog/utils/safeHtml.ts +185 -0
  198. package/src/components/Footer/Footer.test.tsx +1 -1
  199. package/src/components/Form/Form.test.tsx +1 -1
  200. package/src/components/Form/FormErrorSummary.tsx +113 -0
  201. package/src/components/Form/FormFieldset.tsx +127 -0
  202. package/src/components/Form/FormLiveRegion.tsx +198 -0
  203. package/src/components/LoginForm/LoginForm.test.tsx +1 -1
  204. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.performance.test.tsx +76 -10
  205. package/src/components/PaceLoginPage/PaceLoginPage.tsx +1 -1
  206. package/src/components/PasswordReset/PasswordResetForm.test.tsx +597 -0
  207. package/src/components/PasswordReset/PasswordResetForm.tsx +201 -0
  208. package/src/components/PublicLayout/PublicPageDebugger.tsx +104 -0
  209. package/src/components/PublicLayout/PublicPageDiagnostic.tsx +162 -0
  210. package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +1 -1
  211. package/src/components/Select/Select.test.tsx +1 -1
  212. package/src/components/Select/Select.tsx +20 -8
  213. package/src/components/Table/__tests__/Table.test.tsx +1 -1
  214. package/src/components/index.ts +3 -0
  215. package/src/hooks/__tests__/useFileUrl.unit.test.ts +83 -85
  216. package/src/index.ts +4 -0
  217. package/src/rbac/hooks/useCan.test.ts +24 -0
  218. package/src/rbac/hooks/usePermissions.ts +49 -12
  219. package/src/styles/core.css +3 -0
  220. package/src/utils/appConfig.ts +47 -0
  221. package/src/utils/appIdResolver.test.ts +499 -0
  222. package/src/utils/appIdResolver.ts +130 -0
  223. package/src/utils/appNameResolver.simple.test.ts +212 -0
  224. package/src/utils/appNameResolver.test.ts +121 -0
  225. package/src/utils/appNameResolver.ts +191 -0
  226. package/src/utils/audit.ts +127 -0
  227. package/src/utils/auth-utils.ts +96 -0
  228. package/src/utils/bundleAnalysis.ts +129 -0
  229. package/src/utils/cn.ts +7 -0
  230. package/src/utils/debugLogger.ts +67 -0
  231. package/src/utils/deviceFingerprint.ts +215 -0
  232. package/src/utils/dynamicUtils.ts +105 -0
  233. package/src/utils/file-reference.test.ts +788 -0
  234. package/src/utils/file-reference.ts +519 -0
  235. package/src/utils/formatDate.test.ts +237 -0
  236. package/src/utils/formatting.ts +133 -0
  237. package/src/utils/index.ts +7 -0
  238. package/src/utils/lazyLoad.tsx +44 -0
  239. package/src/utils/logger.ts +179 -0
  240. package/src/utils/organisationContext.test.ts +322 -0
  241. package/src/utils/organisationContext.ts +153 -0
  242. package/src/utils/performanceBenchmark.ts +64 -0
  243. package/src/utils/performanceBudgets.ts +110 -0
  244. package/src/utils/permissionTypes.ts +37 -0
  245. package/src/utils/permissionUtils.test.ts +393 -0
  246. package/src/utils/permissionUtils.ts +34 -0
  247. package/src/utils/sanitization.ts +264 -0
  248. package/src/utils/schemaUtils.ts +37 -0
  249. package/src/utils/secureDataAccess.test.ts +711 -0
  250. package/src/utils/secureDataAccess.ts +377 -0
  251. package/src/utils/secureErrors.ts +79 -0
  252. package/src/utils/secureStorage.ts +244 -0
  253. package/src/utils/security.ts +156 -0
  254. package/src/utils/securityMonitor.ts +45 -0
  255. package/src/utils/sessionTracking.ts +126 -0
  256. package/src/utils/validation.ts +111 -0
  257. package/src/utils/validationUtils.ts +120 -0
  258. package/src/validation/index.ts +2 -2
  259. package/dist/chunk-444EZN6N.js.map +0 -1
  260. package/dist/chunk-APIBCTL2.js +0 -670
  261. package/dist/chunk-APIBCTL2.js.map +0 -1
  262. package/dist/chunk-HJGGOMQ6.js.map +0 -1
  263. package/dist/chunk-K2WWTH7O.js +0 -94
  264. package/dist/chunk-K2WWTH7O.js.map +0 -1
  265. package/dist/chunk-L6PGMCMD.js.map +0 -1
  266. package/dist/chunk-LMC26NLJ.js +0 -84
  267. package/dist/chunk-LMC26NLJ.js.map +0 -1
  268. package/dist/chunk-NOHEVYVX.js.map +0 -1
  269. package/dist/chunk-TVYPTYOY.js.map +0 -1
  270. package/dist/validation-8npbysjg.d.ts +0 -177
  271. /package/dist/{DataTable-CYOHOX3O.js.map → DataTable-JXFCA2BJ.js.map} +0 -0
  272. /package/dist/{UnifiedAuthProvider-5E5TUNMS.js.map → UnifiedAuthProvider-XIQQ7LVU.js.map} +0 -0
  273. /package/dist/{chunk-YLKIDTUK.js.map → chunk-22WKWKRX.js.map} +0 -0
  274. /package/dist/{chunk-FHWWBIHA.js.map → chunk-6DXZ6V5Q.js.map} +0 -0
  275. /package/dist/{chunk-2TWNJ46Y.js.map → chunk-6LAAY47Q.js.map} +0 -0
  276. /package/dist/{chunk-XARJS7CD.js.map → chunk-INQLMHPF.js.map} +0 -0
  277. /package/dist/{chunk-SL2YQDR6.js.map → chunk-MA6EPSGZ.js.map} +0 -0
  278. /package/dist/{chunk-5DPZ5EAT.js.map → chunk-OWAG3GSU.js.map} +0 -0
  279. /package/dist/{chunk-LTV3XIJJ.js.map → chunk-T6JN6LH6.js.map} +0 -0
  280. /package/examples/{components → components 2}/DataTable/HierarchicalActionsExample.tsx +0 -0
  281. /package/examples/{components → components 2}/DataTable/HierarchicalExample.tsx +0 -0
  282. /package/examples/{components → components 2}/DataTable/InitialPageSizeExample.tsx +0 -0
  283. /package/examples/{components → components 2}/DataTable/PerformanceExample.tsx +0 -0
  284. /package/examples/{components → components 2}/DataTable/index.ts +0 -0
  285. /package/examples/{components → components 2}/Dialog/BasicHtmlTest.tsx +0 -0
  286. /package/examples/{components → components 2}/Dialog/DebugHtmlExample.tsx +0 -0
  287. /package/examples/{components → components 2}/Dialog/HtmlDialogExample.tsx +0 -0
  288. /package/examples/{components → components 2}/Dialog/ScrollableDialogExample.tsx +0 -0
  289. /package/examples/{components → components 2}/Dialog/SimpleHtmlTest.tsx +0 -0
  290. /package/examples/{components → components 2}/Dialog/SmartDialogExample.tsx +0 -0
  291. /package/examples/{components → components 2}/Dialog/index.ts +0 -0
  292. /package/examples/{components → components 2}/index.ts +0 -0
package/dist/utils.d.ts CHANGED
@@ -1,15 +1,15 @@
1
1
  export { S as SecureDataAccess, a as cn, j as formatCompactNumber, e as formatCurrency, f as formatDate, k as formatFileSize, h as formatNumber, i as formatPercent, g as getAppConfig, d as getCurrentAppId, s as setAppConfig, u as useSessionTracking } from './formatting-CvUXy2mF.js';
2
2
  import { SupabaseClient } from '@supabase/supabase-js';
3
3
  import { D as Database } from './database-C6jy7EOu.js';
4
- export { g as changePasswordSchema, t as combineSchemas, i as contactFormSchema, l as loginSchema, f as passwordResetSchema, q as pickSchema, r as registrationSchema, c as secureLoginSchema, s as securePasswordSchema, h as userProfileSchema } from './validation-8npbysjg.js';
5
- export { CSRFTokenData, SafeQueryParams, SanitizationOptions, buildSafeQueryParams, calculatePasswordStrength, csrfManager, dateSchema, deepMerge, detectSQLInjection, emailSchema, enhancedEmailSchema, enhancedNameSchema, enhancedPasswordSchema, enhancedPhoneSchema, enhancedUrlSchema, escapeLikeQuery, generateCSRFToken, getCSRFToken, isEmpty, isObject, isStrongPassword, isValidDate, isValidEmail, isValidUrl, isWithinRange, limitOffsetSchema, matchesPattern, nameSchema, orderBySchema, passwordSchema, phoneSchema, renderSafeHtml, sanitizeFilters, sanitizeFormData, sanitizeHtml, sanitizeHtml as sanitizeHtmlAdvanced, sanitizeSearchQuery, sanitizeUserInput, sanitizeUserInput_deprecated, searchQuerySchema, sqlIdentifierSchema, urlSchema, userPreferencesSchema, userSettingsSchema, usernameSchema, validateCSRFToken, validateHtml, validateUserInput } from './validation.js';
4
+ export { deepMerge, isEmpty, isObject, isStrongPassword, isValidDate, isValidEmail, isValidUrl, isWithinRange, matchesPattern } from './validation.js';
5
+ import { z } from 'zod';
6
+ export { c as combineSchemas, p as pickSchema } from './schema-DTDZQe2u.js';
6
7
  export { u as useComponentPerformance } from './useComponentPerformance-DE9l5RkL.js';
7
8
  import * as date_fns from 'date-fns';
8
9
  import { D as DataTable } from './DataTable-CWAZZcXC.js';
9
10
  import './types-Dfz9dmVH.js';
10
11
  import React__default, { ComponentType } from 'react';
11
12
  import 'clsx';
12
- import 'zod';
13
13
  import 'react/jsx-runtime';
14
14
  import '@tanstack/react-table';
15
15
 
@@ -239,6 +239,91 @@ declare class CachedAppIdResolver {
239
239
  }
240
240
  declare const cachedAppIdResolver: CachedAppIdResolver;
241
241
 
242
+ /**
243
+ * @file Input Sanitization Layer
244
+ * @package @jmruthers/pace-core
245
+ * @module Utils/Validation/Sanitization
246
+ * @since 0.1.0
247
+ *
248
+ * Comprehensive input sanitization utilities to prevent XSS, injection attacks,
249
+ * and other security vulnerabilities.
250
+ */
251
+
252
+ /**
253
+ * Sanitization options for different contexts
254
+ */
255
+ interface SanitizationOptions {
256
+ allowHtml?: boolean;
257
+ allowedTags?: string[];
258
+ maxLength?: number;
259
+ trim?: boolean;
260
+ removeScripts?: boolean;
261
+ removeEvents?: boolean;
262
+ }
263
+ /**
264
+ * Sanitizes user input by removing potentially dangerous characters and patterns
265
+ */
266
+ declare function sanitizeUserInput(input: string, options?: SanitizationOptions): string;
267
+ /**
268
+ * Validates and sanitizes form data using Zod schemas
269
+ */
270
+ declare function sanitizeFormData<T>(data: unknown, schema: z.ZodSchema<T>, sanitizationRules?: Record<string, SanitizationOptions>): {
271
+ success: boolean;
272
+ data?: T;
273
+ error?: string;
274
+ };
275
+
276
+ /**
277
+ * @file Validation utilities
278
+ *
279
+ * Shared validation utilities with enhanced security
280
+ */
281
+
282
+ /**
283
+ * Validates user input against a schema with automatic sanitization
284
+ */
285
+ declare function validateUserInput<T>(schema: z.ZodSchema<T>, data: unknown, sanitizationRules?: Record<string, SanitizationOptions>): {
286
+ success: boolean;
287
+ data?: T;
288
+ error?: string;
289
+ };
290
+ /**
291
+ * Username validation with sanitization
292
+ */
293
+ declare const usernameSchema: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
294
+
295
+ /**
296
+ * @file Common validation schemas
297
+ * @description Reusable validation schemas for common data types
298
+ */
299
+
300
+ /**
301
+ * Email validation schema
302
+ */
303
+ declare const emailSchema: z.ZodString;
304
+ /**
305
+ * Name validation schema
306
+ */
307
+ declare const nameSchema: z.ZodString;
308
+ /**
309
+ * Phone number validation schema
310
+ */
311
+ declare const phoneSchema: z.ZodString;
312
+ /**
313
+ * URL validation schema
314
+ */
315
+ declare const urlSchema: z.ZodString;
316
+
317
+ /**
318
+ * @file Enhanced Password Schema with Security Validations
319
+ * @description Comprehensive password validation with security checks
320
+ */
321
+
322
+ /**
323
+ * Basic password schema for less strict requirements
324
+ */
325
+ declare const passwordSchema: z.ZodString;
326
+
242
327
  interface SecurityEvent$1 {
243
328
  type: string;
244
329
  timestamp: Date;
@@ -560,4 +645,4 @@ declare function getOrganisationContext(supabase: SupabaseClient): Promise<strin
560
645
  */
561
646
  declare function isOrganisationContextAvailable(supabase: SupabaseClient): Promise<boolean>;
562
647
 
563
- export { CachedAppIdResolver, DebugLogger, LazyDataTable, LogLevel, Logger, type LoggerConfig, PERFORMANCE_BUDGETS, PERFORMANCE_THRESHOLDS, type PerformanceMetrics$1 as PerformanceMetrics, PermissionType, type SecurityEvent$1 as SecurityEvent, auditLog, auditLogger, bundleAnalyzer, cachedAppIdResolver, clearOrganisationContext, createLazyComponent, createLazyUtility, createLogger, createPerformanceBenchmark, generateDeviceFingerprint, getAppId, getAppIds, getAppNameFromBuildTime, getAppNameFromEnvironment, getAppNameFromGlobal, getAppNameFromPackageJson, getCurrentAppName, getCurrentAppNameWithFallback, getOrganisationContext, getSecurityHeaders, hasAllPermissions, hasAnyPermission, hasPermission, isOrganisationContextAvailable, lazyCSVUtils, lazyChartUtils, lazyDateUtils, lazyFormUtils, lazyLodash, loadCSVUtils, loadChartUtils, loadDateUtils, loadFormUtils, loadLodash, logAuditEvent, logAuthEvent, logPermissionEvent, logSecurityEvent, logger, measureRenderPerformance, parsePermission, performanceBudgetMonitor, securityMonitor, setOrganisationContext, setRBACAppName, trackDynamicImport, transformPermissionMapToBoolean, validateDeviceFingerprint, validateImportPattern, validateSecurityHeaders };
648
+ export { CachedAppIdResolver, DebugLogger, LazyDataTable, LogLevel, Logger, type LoggerConfig, PERFORMANCE_BUDGETS, PERFORMANCE_THRESHOLDS, type PerformanceMetrics$1 as PerformanceMetrics, PermissionType, type SecurityEvent$1 as SecurityEvent, auditLog, auditLogger, bundleAnalyzer, cachedAppIdResolver, clearOrganisationContext, createLazyComponent, createLazyUtility, createLogger, createPerformanceBenchmark, emailSchema, generateDeviceFingerprint, getAppId, getAppIds, getAppNameFromBuildTime, getAppNameFromEnvironment, getAppNameFromGlobal, getAppNameFromPackageJson, getCurrentAppName, getCurrentAppNameWithFallback, getOrganisationContext, getSecurityHeaders, hasAllPermissions, hasAnyPermission, hasPermission, isOrganisationContextAvailable, lazyCSVUtils, lazyChartUtils, lazyDateUtils, lazyFormUtils, lazyLodash, loadCSVUtils, loadChartUtils, loadDateUtils, loadFormUtils, loadLodash, logAuditEvent, logAuthEvent, logPermissionEvent, logSecurityEvent, logger, measureRenderPerformance, nameSchema, parsePermission, passwordSchema, performanceBudgetMonitor, phoneSchema, sanitizeFormData, sanitizeUserInput, securityMonitor, setOrganisationContext, setRBACAppName, trackDynamicImport, transformPermissionMapToBoolean, urlSchema, usernameSchema, validateDeviceFingerprint, validateImportPattern, validateSecurityHeaders, validateUserInput };
package/dist/utils.js CHANGED
@@ -17,6 +17,7 @@ import {
17
17
  getAppId,
18
18
  getAppIds
19
19
  } from "./chunk-S5OFRT4M.js";
20
+ import "./chunk-OWAG3GSU.js";
20
21
  import {
21
22
  getAppNameFromBuildTime,
22
23
  getAppNameFromEnvironment,
@@ -27,17 +28,7 @@ import {
27
28
  setRBACAppName
28
29
  } from "./chunk-Q5QRDWKI.js";
29
30
  import {
30
- buildSafeQueryParams,
31
- calculatePasswordStrength,
32
- csrfManager,
33
- dateSchema,
34
31
  deepMerge,
35
- detectSQLInjection,
36
- emailSchema,
37
- emailSchema2,
38
- escapeLikeQuery,
39
- generateCSRFToken,
40
- getCSRFToken,
41
32
  isEmpty,
42
33
  isObject,
43
34
  isStrongPassword,
@@ -45,35 +36,8 @@ import {
45
36
  isValidEmail,
46
37
  isValidUrl,
47
38
  isWithinRange,
48
- limitOffsetSchema,
49
- matchesPattern,
50
- nameSchema,
51
- nameSchema2,
52
- orderBySchema,
53
- passwordSchema,
54
- passwordSchema2,
55
- phoneSchema,
56
- phoneSchema2,
57
- sanitizeFilters,
58
- sanitizeFormData,
59
- sanitizeSearchQuery,
60
- sanitizeUserInput,
61
- sanitizeUserInput_deprecated,
62
- searchQuerySchema,
63
- sqlIdentifierSchema,
64
- urlSchema,
65
- urlSchema2,
66
- userPreferencesSchema,
67
- userSettingsSchema,
68
- usernameSchema,
69
- validateCSRFToken,
70
- validateUserInput
71
- } from "./chunk-APIBCTL2.js";
72
- import {
73
- renderSafeHtml,
74
- sanitizeHtml,
75
- validateHtml
76
- } from "./chunk-5DPZ5EAT.js";
39
+ matchesPattern
40
+ } from "./chunk-JISYG63F.js";
77
41
  import {
78
42
  useComponentPerformance
79
43
  } from "./chunk-ANBQRTPX.js";
@@ -88,25 +52,15 @@ import {
88
52
  clearOrganisationContext,
89
53
  getOrganisationContext,
90
54
  init_organisationContext,
55
+ init_secureStorage,
91
56
  isOrganisationContextAvailable,
57
+ secureStorage,
92
58
  setOrganisationContext
93
- } from "./chunk-K2WWTH7O.js";
94
- import {
95
- init_secureStorage,
96
- secureStorage
97
- } from "./chunk-444EZN6N.js";
59
+ } from "./chunk-7QCC6MCP.js";
98
60
  import {
99
- changePasswordSchema,
100
61
  combineSchemas,
101
- contactFormSchema,
102
- loginSchema,
103
- passwordResetSchema,
104
- pickSchema,
105
- registrationSchema,
106
- secureLoginSchema,
107
- securePasswordSchema,
108
- userProfileSchema
109
- } from "./chunk-LMC26NLJ.js";
62
+ pickSchema
63
+ } from "./chunk-BJPBT3CU.js";
110
64
  import {
111
65
  LogLevel,
112
66
  Logger,
@@ -169,11 +123,210 @@ var DebugLogger = class {
169
123
  // src/utils/index.ts
170
124
  init_logger();
171
125
 
126
+ // src/utils/validation/validationUtils.ts
127
+ import { z as z2 } from "zod";
128
+
129
+ // src/utils/validation/sanitization.ts
130
+ import { z } from "zod";
131
+ var DEFAULT_OPTIONS = {
132
+ allowHtml: false,
133
+ allowedTags: [],
134
+ maxLength: 1e3,
135
+ trim: true,
136
+ removeScripts: true,
137
+ removeEvents: true
138
+ };
139
+ function sanitizeUserInput(input, options = {}) {
140
+ if (typeof input !== "string") {
141
+ return "";
142
+ }
143
+ const opts = { ...DEFAULT_OPTIONS, ...options };
144
+ let sanitized = input;
145
+ if (opts.trim) {
146
+ sanitized = sanitized.trim();
147
+ }
148
+ if (opts.maxLength && sanitized.length > opts.maxLength) {
149
+ sanitized = sanitized.substring(0, opts.maxLength);
150
+ }
151
+ if (!opts.allowHtml) {
152
+ sanitized = sanitized.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#x27;").replace(/\//g, "&#x2F;");
153
+ } else if (opts.allowedTags && opts.allowedTags.length > 0) {
154
+ const allowedTagsRegex = new RegExp(`<(?!/?(?:${opts.allowedTags.join("|")})s*/?>)[^>]+>`, "gi");
155
+ sanitized = sanitized.replace(allowedTagsRegex, "");
156
+ }
157
+ if (opts.removeScripts) {
158
+ sanitized = sanitized.replace(/<script[^>]*>.*?<\/script>/gi, "").replace(/javascript:/gi, "").replace(/vbscript:/gi, "").replace(/data:/gi, "");
159
+ }
160
+ if (opts.removeEvents) {
161
+ sanitized = sanitized.replace(/on\w+\s*=/gi, "");
162
+ }
163
+ return sanitized;
164
+ }
165
+ function sanitizeEmail(email) {
166
+ if (typeof email !== "string") {
167
+ return "";
168
+ }
169
+ return email.trim().toLowerCase().replace(/[^\w@.-]/g, "");
170
+ }
171
+ function sanitizeFormData(data, schema, sanitizationRules) {
172
+ try {
173
+ if (sanitizationRules && typeof data === "object" && data !== null) {
174
+ const sanitizedData = { ...data };
175
+ Object.entries(sanitizationRules).forEach(([field, options]) => {
176
+ if (typeof sanitizedData[field] === "string") {
177
+ sanitizedData[field] = sanitizeUserInput(sanitizedData[field], options);
178
+ }
179
+ });
180
+ data = sanitizedData;
181
+ }
182
+ const result = schema.parse(data);
183
+ return { success: true, data: result };
184
+ } catch (error) {
185
+ if (error instanceof z.ZodError) {
186
+ return {
187
+ success: false,
188
+ error: error.errors.map((e) => e.message).join(", ")
189
+ };
190
+ }
191
+ return {
192
+ success: false,
193
+ error: "Validation failed"
194
+ };
195
+ }
196
+ }
197
+ var secureEmailSchema = z.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long").refine(
198
+ (email) => {
199
+ if (!email || typeof email !== "string") return false;
200
+ const domain = email.split("@")[1];
201
+ return domain && domain.includes(".") && domain.length > 3;
202
+ },
203
+ "Invalid email domain"
204
+ ).transform((email) => sanitizeEmail(email));
205
+ var emailSchema = z.string().min(1, "Email is required").email("Invalid email format");
206
+ var nameSchema = z.string().min(1, "Name is required").max(100, "Name too long").regex(/^[a-zA-Z\s'-]+$/, "Name contains invalid characters");
207
+ var phoneSchema = z.string().regex(/^[\+]?[1-9][\d]{0,15}$/, "Invalid phone number format");
208
+ var urlSchema = z.string().url("Invalid URL format");
209
+ var dateSchema = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Invalid date format (YYYY-MM-DD)");
210
+ var secureLoginSchema = z.object({
211
+ email: secureEmailSchema,
212
+ password: z.string().min(1, "Password is required")
213
+ });
214
+
215
+ // src/utils/validation/validationUtils.ts
216
+ init_logger();
217
+ var log = createLogger("ValidationUtils");
218
+ function validateUserInput(schema, data, sanitizationRules) {
219
+ return sanitizeFormData(data, schema, sanitizationRules);
220
+ }
221
+ var emailSchema2 = z2.string().transform((email) => email.toLowerCase().trim()).pipe(z2.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long"));
222
+ var passwordSchema = z2.string().min(8, "Password must be at least 8 characters").max(128, "Password too long").regex(/[A-Z]/, "Password must contain at least one uppercase letter").regex(/[a-z]/, "Password must contain at least one lowercase letter").regex(/[0-9]/, "Password must contain at least one number").regex(/[^A-Za-z0-9]/, "Password must contain at least one special character");
223
+ var usernameSchema = z2.string().transform((username) => username.toLowerCase().trim()).pipe(z2.string().min(3, "Username must be at least 3 characters").max(30, "Username too long").regex(/^[a-zA-Z0-9_-]+$/, "Username can only contain letters, numbers, hyphens, and underscores"));
224
+ var nameSchema2 = z2.string().min(1, "Name is required").max(100, "Name too long").refine((name) => {
225
+ const dangerousPatterns = [
226
+ /<script/i,
227
+ /<img/i,
228
+ /on\w+\s*=/i,
229
+ /javascript:/i,
230
+ /data:/i,
231
+ /vbscript:/i
232
+ ];
233
+ return !dangerousPatterns.some((pattern) => pattern.test(name));
234
+ }, "Name contains invalid characters").transform((name) => sanitizeUserInput(name, {
235
+ allowHtml: false,
236
+ maxLength: 100,
237
+ trim: true
238
+ }));
239
+ var phoneSchema2 = z2.string().min(10, "Phone number must be at least 10 digits").max(20, "Phone number too long").regex(/^[\+]?[0-9\s\-\(\)\.]+$/, "Invalid phone number format").refine((phone) => {
240
+ const digitsOnly = phone.replace(/\D/g, "");
241
+ return digitsOnly.length >= 10 && digitsOnly.length <= 15;
242
+ }, "Phone number must be between 10 and 15 digits");
243
+ var urlSchema2 = z2.string().min(1, "URL is required").max(2048, "URL too long").refine((url) => {
244
+ try {
245
+ const parsed = new URL(url);
246
+ return ["http:", "https:"].includes(parsed.protocol);
247
+ } catch {
248
+ return false;
249
+ }
250
+ }, "Invalid URL format").refine((url) => {
251
+ const dangerousPatterns = [
252
+ /javascript:/i,
253
+ /data:/i,
254
+ /vbscript:/i,
255
+ /file:/i,
256
+ /mailto:/i
257
+ ];
258
+ return !dangerousPatterns.some((pattern) => pattern.test(url));
259
+ }, "URL contains invalid protocol");
260
+
261
+ // src/utils/validation/common.ts
262
+ import { z as z3 } from "zod";
263
+ var emailSchema3 = z3.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long");
264
+ var nameSchema3 = z3.string().min(1, "Name is required").max(100, "Name too long").regex(/^[a-zA-Z\s'-]+$/, "Name contains invalid characters");
265
+ var phoneSchema3 = z3.string().regex(/^\+?[\d\s\-\(\)]+$/, "Invalid phone number format").min(10, "Phone number too short").max(20, "Phone number too long");
266
+ var urlSchema3 = z3.string().url("Invalid URL format").max(2048, "URL too long");
267
+ var dateSchema2 = z3.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format").refine((date) => {
268
+ const parsed = new Date(date);
269
+ return !isNaN(parsed.getTime());
270
+ }, "Invalid date");
271
+
272
+ // src/utils/validation/passwordSchema.ts
273
+ import { z as z4 } from "zod";
274
+ var COMMON_PASSWORDS = /* @__PURE__ */ new Set([
275
+ "password",
276
+ "123456",
277
+ "123456789",
278
+ "qwerty",
279
+ "abc123",
280
+ "password123",
281
+ "admin",
282
+ "letmein",
283
+ "welcome",
284
+ "monkey",
285
+ "1234567890",
286
+ "password1"
287
+ ]);
288
+ var WEAK_PATTERNS = [
289
+ /^(.)\1+$/,
290
+ // All same character
291
+ /^(012|123|234|345|456|567|678|789|890|987|876|765|654|543|432|321|210)+/,
292
+ // Sequential numbers
293
+ /^(abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz)+/i
294
+ // Sequential letters
295
+ ];
296
+ var securePasswordSchema = z4.string().min(8, "Password must be at least 8 characters long").max(128, "Password must not exceed 128 characters").refine(
297
+ (password) => /[a-z]/.test(password),
298
+ "Password must contain at least one lowercase letter"
299
+ ).refine(
300
+ (password) => /[A-Z]/.test(password),
301
+ "Password must contain at least one uppercase letter"
302
+ ).refine(
303
+ (password) => /\d/.test(password),
304
+ "Password must contain at least one number"
305
+ ).refine(
306
+ (password) => /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password),
307
+ "Password must contain at least one special character"
308
+ ).refine(
309
+ (password) => !COMMON_PASSWORDS.has(password.toLowerCase()),
310
+ "Password is too common. Please choose a stronger password"
311
+ ).refine(
312
+ (password) => !WEAK_PATTERNS.some((pattern) => pattern.test(password)),
313
+ "Password contains weak patterns. Please choose a more complex password"
314
+ ).refine(
315
+ (password) => {
316
+ const keyboardPatterns = ["qwerty", "asdfgh", "zxcvbn", "1234567890"];
317
+ return !keyboardPatterns.some(
318
+ (pattern) => password.toLowerCase().includes(pattern)
319
+ );
320
+ },
321
+ "Password contains keyboard patterns. Please choose a more secure password"
322
+ );
323
+ var passwordSchema2 = z4.string().min(6, "Password must be at least 6 characters long").max(128, "Password must not exceed 128 characters");
324
+
172
325
  // src/utils/security/security.ts
173
326
  init_logger();
174
- var log = createLogger("Security");
327
+ var log2 = createLogger("Security");
175
328
  function logSecurityEvent(event) {
176
- log.warn("Security event:", {
329
+ log2.warn("Security event:", {
177
330
  ...event,
178
331
  timestamp: event.timestamp.toISOString()
179
332
  });
@@ -449,7 +602,7 @@ function createLazyComponent(importFn, componentName, options = {}) {
449
602
  return WrappedComponent;
450
603
  }
451
604
  var LazyDataTable = createLazyComponent(
452
- () => import("./DataTable-CYOHOX3O.js").then((module) => ({ default: module.DataTable })),
605
+ () => import("./DataTable-JXFCA2BJ.js").then((module) => ({ default: module.DataTable })),
453
606
  "DataTable"
454
607
  );
455
608
 
@@ -726,37 +879,23 @@ export {
726
879
  PermissionType,
727
880
  auditLog,
728
881
  auditLogger,
729
- buildSafeQueryParams,
730
882
  bundleAnalyzer,
731
883
  cachedAppIdResolver,
732
- calculatePasswordStrength,
733
- changePasswordSchema,
734
884
  clearOrganisationContext,
735
885
  cn,
736
886
  combineSchemas,
737
- contactFormSchema,
738
887
  createLazyComponent,
739
888
  createLazyUtility,
740
889
  createLogger,
741
890
  createPerformanceBenchmark,
742
- csrfManager,
743
- dateSchema,
744
891
  deepMerge,
745
- detectSQLInjection,
746
- emailSchema2 as emailSchema,
747
- emailSchema as enhancedEmailSchema,
748
- nameSchema as enhancedNameSchema,
749
- passwordSchema as enhancedPasswordSchema,
750
- phoneSchema as enhancedPhoneSchema,
751
- urlSchema as enhancedUrlSchema,
752
- escapeLikeQuery,
892
+ emailSchema3 as emailSchema,
753
893
  formatCompactNumber,
754
894
  formatCurrency,
755
895
  formatDate,
756
896
  formatFileSize,
757
897
  formatNumber,
758
898
  formatPercent,
759
- generateCSRFToken,
760
899
  generateDeviceFingerprint,
761
900
  getAppConfig,
762
901
  getAppId,
@@ -765,7 +904,6 @@ export {
765
904
  getAppNameFromEnvironment,
766
905
  getAppNameFromGlobal,
767
906
  getAppNameFromPackageJson,
768
- getCSRFToken,
769
907
  getCurrentAppId,
770
908
  getCurrentAppName,
771
909
  getCurrentAppNameWithFallback,
@@ -787,7 +925,6 @@ export {
787
925
  lazyDateUtils,
788
926
  lazyFormUtils,
789
927
  lazyLodash,
790
- limitOffsetSchema,
791
928
  loadCSVUtils,
792
929
  loadChartUtils,
793
930
  loadDateUtils,
@@ -798,46 +935,27 @@ export {
798
935
  logPermissionEvent,
799
936
  logSecurityEvent2 as logSecurityEvent,
800
937
  logger,
801
- loginSchema,
802
938
  matchesPattern,
803
939
  measureRenderPerformance,
804
- nameSchema2 as nameSchema,
805
- orderBySchema,
940
+ nameSchema3 as nameSchema,
806
941
  parsePermission,
807
- passwordResetSchema,
808
942
  passwordSchema2 as passwordSchema,
809
943
  performanceBudgetMonitor,
810
- phoneSchema2 as phoneSchema,
944
+ phoneSchema3 as phoneSchema,
811
945
  pickSchema,
812
- registrationSchema,
813
- renderSafeHtml,
814
- sanitizeFilters,
815
946
  sanitizeFormData,
816
- sanitizeHtml,
817
- sanitizeHtml as sanitizeHtmlAdvanced,
818
- sanitizeSearchQuery,
819
947
  sanitizeUserInput,
820
- sanitizeUserInput_deprecated,
821
- searchQuerySchema,
822
- secureLoginSchema,
823
- securePasswordSchema,
824
948
  securityMonitor,
825
949
  setAppConfig,
826
950
  setOrganisationContext,
827
951
  setRBACAppName,
828
- sqlIdentifierSchema,
829
952
  trackDynamicImport,
830
953
  transformPermissionMapToBoolean,
831
- urlSchema2 as urlSchema,
954
+ urlSchema3 as urlSchema,
832
955
  useComponentPerformance,
833
956
  useSessionTracking,
834
- userPreferencesSchema,
835
- userProfileSchema,
836
- userSettingsSchema,
837
957
  usernameSchema,
838
- validateCSRFToken,
839
958
  validateDeviceFingerprint,
840
- validateHtml,
841
959
  validateImportPattern,
842
960
  validateSecurityHeaders,
843
961
  validateUserInput