@jmruthers/pace-core 0.5.184 → 0.5.186
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.
- package/CHANGELOG.md +38 -0
- package/README.md +60 -1
- package/core-usage-manifest.json +312 -0
- package/dist/{DataTable-QAB34V6K.js → DataTable-IX2NBUTP.js} +6 -6
- package/dist/{DataTable-Bz8ffqyA.d.ts → DataTable-Z9NLVJh0.d.ts} +1 -1
- package/dist/{index-Bl--n7-T.d.ts → PublicPageProvider-DIzEzwKl.d.ts} +23 -10
- package/dist/{UnifiedAuthProvider-7F6T4B6K.js → UnifiedAuthProvider-A4BCQRJY.js} +4 -2
- package/dist/{UnifiedAuthProvider-F86d7dSi.d.ts → UnifiedAuthProvider-BG0AL5eE.d.ts} +2 -1
- package/dist/{api-ROMBCNKU.js → api-BMFCXVQX.js} +2 -2
- package/dist/{chunk-RA3JUFMW.js → chunk-445GEP27.js} +154 -4
- package/dist/{chunk-RA3JUFMW.js.map → chunk-445GEP27.js.map} +1 -1
- package/dist/{chunk-W22JP75J.js → chunk-DAGICKHT.js} +9 -7
- package/dist/chunk-DAGICKHT.js.map +1 -0
- package/dist/{chunk-FUEYYMX5.js → chunk-FXFJRTKI.js} +24 -3
- package/dist/chunk-FXFJRTKI.js.map +1 -0
- package/dist/{chunk-CSOFYHAG.js → chunk-GRIQLQ52.js} +374 -60
- package/dist/chunk-GRIQLQ52.js.map +1 -0
- package/dist/{chunk-NQPMQGS2.js → chunk-HDCUMOOI.js} +497 -399
- package/dist/chunk-HDCUMOOI.js.map +1 -0
- package/dist/chunk-HESYZWZW.js +388 -0
- package/dist/chunk-HESYZWZW.js.map +1 -0
- package/dist/{chunk-QUVSNGIP.js → chunk-HGPQUCBC.js} +34 -9
- package/dist/{chunk-QUVSNGIP.js.map → chunk-HGPQUCBC.js.map} +1 -1
- package/dist/{chunk-PWAHJW4G.js → chunk-OALXJH4Y.js} +86 -33
- package/dist/chunk-OALXJH4Y.js.map +1 -0
- package/dist/{chunk-MI7HBHN3.js → chunk-TC7D3CR3.js} +89 -9
- package/dist/chunk-TC7D3CR3.js.map +1 -0
- package/dist/chunk-THRPYOFK.js +215 -0
- package/dist/chunk-THRPYOFK.js.map +1 -0
- package/dist/{chunk-M7W4CP3M.js → chunk-U6WNSFX5.js} +2 -1
- package/dist/chunk-U6WNSFX5.js.map +1 -0
- package/dist/{chunk-UHNYIBXL.js → chunk-UQWSHFVX.js} +1 -1
- package/dist/chunk-UQWSHFVX.js.map +1 -0
- package/dist/{chunk-QCDXODCA.js → chunk-XAUHJD3L.js} +2 -2
- package/dist/components.d.ts +182 -6
- package/dist/components.js +157 -11
- package/dist/components.js.map +1 -1
- package/dist/{database.generated-CBmg2950.d.ts → database.generated-DI89OQeI.d.ts} +63 -9
- package/dist/eslint-rules/pace-core-compliance.cjs +406 -0
- package/dist/{file-reference-D06mEEWW.d.ts → file-reference-PRTSLxKx.d.ts} +10 -1
- package/dist/hooks.d.ts +52 -15
- package/dist/hooks.js +12 -22
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +12 -12
- package/dist/index.js +82 -18
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +1 -1
- package/dist/providers.js +3 -1
- package/dist/rbac/index.d.ts +206 -15
- package/dist/rbac/index.js +28 -6
- package/dist/timezone-_pgH8qrY.d.ts +530 -0
- package/dist/{types-_x1f4QBF.d.ts → types-DUyCRSTj.d.ts} +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.js +1 -1
- package/dist/{usePublicRouteParams-JJczomYq.d.ts → usePublicRouteParams-D71QLlg4.d.ts} +114 -3
- package/dist/utils.d.ts +110 -152
- package/dist/utils.js +128 -138
- package/dist/utils.js.map +1 -1
- package/docs/api/README.md +60 -1
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +1 -1
- package/docs/api/classes/Logger.md +178 -0
- package/docs/api/classes/MissingUserContextError.md +1 -1
- package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
- package/docs/api/classes/PermissionDeniedError.md +1 -1
- package/docs/api/classes/RBACAuditManager.md +2 -2
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +2 -2
- package/docs/api/classes/RBACError.md +1 -1
- package/docs/api/classes/RBACNotInitializedError.md +1 -1
- package/docs/api/classes/SecureSupabaseClient.md +5 -5
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +1 -1
- package/docs/api/enums/LogLevel.md +54 -0
- package/docs/api/enums/RBACErrorCode.md +1 -1
- package/docs/api/enums/RPCFunction.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/BadgeProps.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +1 -1
- package/docs/api/interfaces/CalendarProps.md +18 -2
- package/docs/api/interfaces/CardProps.md +1 -1
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/ComplianceResult.md +30 -0
- package/docs/api/interfaces/DataAccessRecord.md +1 -1
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +1 -1
- package/docs/api/interfaces/DataTableColumn.md +1 -1
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
- package/docs/api/interfaces/DatabaseComplianceResult.md +85 -0
- package/docs/api/interfaces/DatabaseIssue.md +41 -0
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventAppRoleData.md +6 -6
- package/docs/api/interfaces/ExportColumn.md +1 -1
- package/docs/api/interfaces/ExportOptions.md +1 -1
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +1 -1
- package/docs/api/interfaces/FileReference.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +48 -8
- package/docs/api/interfaces/FileUploadProps.md +46 -13
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/FormFieldProps.md +1 -1
- package/docs/api/interfaces/FormProps.md +1 -1
- package/docs/api/interfaces/GrantEventAppRoleParams.md +9 -9
- package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +1 -1
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoggerConfig.md +62 -0
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +1 -1
- package/docs/api/interfaces/NavigationMenuProps.md +1 -1
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +36 -23
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +11 -11
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProgressProps.md +1 -1
- package/docs/api/interfaces/ProtectedRouteProps.md +6 -6
- package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
- package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
- package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
- package/docs/api/interfaces/QuickFix.md +52 -0
- package/docs/api/interfaces/RBACAccessValidateParams.md +1 -1
- package/docs/api/interfaces/RBACAccessValidateResult.md +1 -1
- package/docs/api/interfaces/RBACAuditLogParams.md +1 -1
- package/docs/api/interfaces/RBACAuditLogResult.md +1 -1
- package/docs/api/interfaces/RBACConfig.md +4 -4
- package/docs/api/interfaces/RBACContext.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +1 -1
- package/docs/api/interfaces/RBACPermissionCheckParams.md +1 -1
- package/docs/api/interfaces/RBACPermissionCheckResult.md +1 -1
- package/docs/api/interfaces/RBACPermissionsGetParams.md +1 -1
- package/docs/api/interfaces/RBACPermissionsGetResult.md +1 -1
- package/docs/api/interfaces/RBACResult.md +1 -1
- package/docs/api/interfaces/RBACRoleGrantParams.md +1 -1
- package/docs/api/interfaces/RBACRoleGrantResult.md +1 -1
- package/docs/api/interfaces/RBACRoleRevokeParams.md +1 -1
- package/docs/api/interfaces/RBACRoleRevokeResult.md +1 -1
- package/docs/api/interfaces/RBACRoleValidateParams.md +1 -1
- package/docs/api/interfaces/RBACRoleValidateResult.md +1 -1
- package/docs/api/interfaces/RBACRolesListParams.md +1 -1
- package/docs/api/interfaces/RBACRolesListResult.md +1 -1
- package/docs/api/interfaces/RBACSessionTrackParams.md +1 -1
- package/docs/api/interfaces/RBACSessionTrackResult.md +1 -1
- package/docs/api/interfaces/ResourcePermissions.md +1 -1
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +7 -7
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RoleManagementResult.md +5 -5
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/RuntimeComplianceResult.md +55 -0
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +1 -1
- package/docs/api/interfaces/SetupIssue.md +41 -0
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/TabsContentProps.md +1 -1
- package/docs/api/interfaces/TabsListProps.md +1 -1
- package/docs/api/interfaces/TabsProps.md +1 -1
- package/docs/api/interfaces/TabsTriggerProps.md +1 -1
- package/docs/api/interfaces/TextareaProps.md +1 -1
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
- package/docs/api/interfaces/UseFormDialogOptions.md +62 -0
- package/docs/api/interfaces/UseFormDialogReturn.md +117 -0
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +2 -2
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +2 -2
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeOptions.md +2 -2
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +1 -1
- package/docs/api/interfaces/UserMenuProps.md +1 -1
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +746 -50
- package/docs/api-reference/components.md +26 -12
- package/docs/api-reference/hooks.md +111 -0
- package/docs/api-reference/rpc-functions.md +1 -1
- package/docs/api-reference/utilities.md +184 -0
- package/docs/getting-started/installation-guide.md +75 -16
- package/docs/getting-started/quick-start.md +61 -11
- package/docs/implementation-guides/authentication.md +88 -12
- package/docs/implementation-guides/file-reference-system.md +26 -3
- package/docs/implementation-guides/file-upload-storage.md +30 -1
- package/docs/rbac/README.md +1 -0
- package/docs/rbac/compliance/compliance-guide.md +544 -0
- package/docs/rbac/getting-started.md +158 -33
- package/docs/standards/pace-core-compliance.md +432 -0
- package/eslint-config-pace-core.cjs +93 -0
- package/package.json +15 -3
- package/scripts/analyze-bundle.js +232 -0
- package/scripts/build-css.js +56 -0
- package/scripts/build-docs-incremental.js +1015 -0
- package/scripts/check-pace-core-compliance.cjs +2353 -0
- package/scripts/check-pace-core-compliance.js +512 -0
- package/scripts/generate-docs.js +157 -0
- package/scripts/setup-build-cache.js +73 -0
- package/scripts/utils/command-runner.js +131 -0
- package/scripts/utils/env.js +33 -0
- package/scripts/utils/index.js +10 -0
- package/scripts/utils/logger.js +88 -0
- package/scripts/utils/path-helpers.js +37 -0
- package/scripts/validate-formats.js +133 -0
- package/scripts/validate-master.js +155 -0
- package/scripts/validate-pre-publish.js +140 -0
- package/scripts/validate-theme.js +142 -0
- package/src/components/Calendar/Calendar.tsx +8 -1
- package/src/components/Card/Card.tsx +47 -8
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +314 -0
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +126 -0
- package/src/components/DatePickerWithTimezone/README.md +135 -0
- package/src/components/DatePickerWithTimezone/index.ts +10 -0
- package/src/components/DateTimeField/DateTimeField.test.tsx +358 -0
- package/src/components/DateTimeField/DateTimeField.tsx +232 -0
- package/src/components/DateTimeField/README.md +148 -0
- package/src/components/DateTimeField/index.ts +10 -0
- package/src/components/FileUpload/FileUpload.test.tsx +2 -0
- package/src/components/FileUpload/FileUpload.tsx +10 -1
- package/src/components/Header/Header.test.tsx +47 -18
- package/src/components/Header/Header.tsx +22 -7
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +29 -20
- package/src/components/PaceAppLayout/README.md +9 -0
- package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +37 -8
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +146 -5
- package/src/components/index.ts +8 -0
- package/src/eslint-rules/pace-core-compliance.cjs +406 -0
- package/src/eslint-rules/pace-core-compliance.js +640 -0
- package/src/hooks/__tests__/useFormDialog.test.ts +478 -0
- package/src/hooks/index.ts +5 -0
- package/src/hooks/useFileReference.test.ts +2 -0
- package/src/hooks/useFormDialog.ts +147 -0
- package/src/hooks/usePreventTabReload.ts +106 -0
- package/src/hooks/useSecureDataAccess.ts +2 -2
- package/src/index.ts +27 -0
- package/src/providers/services/OrganisationServiceProvider.tsx +6 -5
- package/src/providers/services/UnifiedAuthProvider.tsx +24 -3
- package/src/rbac/__tests__/rbac-role-isolation.test.ts +456 -0
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +3 -0
- package/src/rbac/compliance/database-validator.ts +165 -0
- package/src/rbac/compliance/index.ts +38 -0
- package/src/rbac/compliance/quick-fix-suggestions.ts +209 -0
- package/src/rbac/compliance/runtime-compliance.ts +77 -0
- package/src/rbac/compliance/setup-validator.ts +131 -0
- package/src/rbac/components/PagePermissionGuard.tsx +8 -64
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +35 -21
- package/src/rbac/docs/event-based-apps.md +285 -0
- package/src/rbac/errors.ts +11 -0
- package/src/rbac/hooks/useRoleManagement.ts +292 -12
- package/src/rbac/index.ts +30 -0
- package/src/services/OrganisationService.ts +4 -0
- package/src/styles/core.css +5 -5
- package/src/types/database.generated.ts +63 -9
- package/src/types/file-reference.ts +9 -0
- package/src/utils/__tests__/timezone.test.ts +345 -0
- package/src/utils/file-reference/__tests__/file-reference.test.ts +60 -4
- package/src/utils/file-reference/index.ts +13 -2
- package/src/utils/formatting/formatDateTimeTimezone.test.ts +167 -0
- package/src/utils/formatting/formatting.ts +179 -0
- package/src/utils/index.ts +27 -1
- package/src/utils/location/index.ts +16 -0
- package/src/utils/location/location.test.ts +286 -0
- package/src/utils/location/location.ts +175 -0
- package/src/utils/security/secureDataAccess.ts +1 -1
- package/src/utils/storage/helpers.ts +68 -0
- package/src/utils/timezone/index.ts +17 -0
- package/src/utils/timezone/timezone.test.ts +349 -0
- package/src/utils/timezone/timezone.ts +281 -0
- package/dist/chunk-CSOFYHAG.js.map +0 -1
- package/dist/chunk-FUEYYMX5.js.map +0 -1
- package/dist/chunk-HKIT6O7W.js +0 -198
- package/dist/chunk-HKIT6O7W.js.map +0 -1
- package/dist/chunk-KUEN3HFB.js +0 -94
- package/dist/chunk-KUEN3HFB.js.map +0 -1
- package/dist/chunk-M7W4CP3M.js.map +0 -1
- package/dist/chunk-MI7HBHN3.js.map +0 -1
- package/dist/chunk-NQPMQGS2.js.map +0 -1
- package/dist/chunk-PWAHJW4G.js.map +0 -1
- package/dist/chunk-UHNYIBXL.js.map +0 -1
- package/dist/chunk-W22JP75J.js.map +0 -1
- package/dist/formatting-5wETwiGF.d.ts +0 -162
- /package/dist/{DataTable-QAB34V6K.js.map → DataTable-IX2NBUTP.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-7F6T4B6K.js.map → UnifiedAuthProvider-A4BCQRJY.js.map} +0 -0
- /package/dist/{api-ROMBCNKU.js.map → api-BMFCXVQX.js.map} +0 -0
- /package/dist/{chunk-QCDXODCA.js.map → chunk-XAUHJD3L.js.map} +0 -0
package/dist/utils.js
CHANGED
|
@@ -1,24 +1,43 @@
|
|
|
1
1
|
import {
|
|
2
|
+
calculatePasswordStrength,
|
|
3
|
+
dateSchema,
|
|
4
|
+
emailSchema,
|
|
2
5
|
formatCompactNumber,
|
|
3
6
|
formatCurrency,
|
|
4
7
|
formatDate,
|
|
8
|
+
formatDateOnlyForDisplay,
|
|
5
9
|
formatDateTime,
|
|
10
|
+
formatDateTimeForDisplay,
|
|
11
|
+
formatDateTimeForMap,
|
|
12
|
+
formatDateTimeForTable,
|
|
6
13
|
formatFileSize,
|
|
7
14
|
formatNumber,
|
|
8
15
|
formatPercent,
|
|
9
16
|
formatTime,
|
|
10
17
|
getAppConfig,
|
|
11
18
|
getCurrentAppId,
|
|
19
|
+
nameSchema,
|
|
20
|
+
passwordSchema,
|
|
21
|
+
phoneSchema,
|
|
12
22
|
setAppConfig,
|
|
23
|
+
urlSchema,
|
|
13
24
|
useSessionTracking
|
|
14
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-HESYZWZW.js";
|
|
15
26
|
import {
|
|
16
27
|
CachedAppIdResolver,
|
|
17
28
|
LoadingSpinner,
|
|
18
29
|
cachedAppIdResolver,
|
|
30
|
+
formatInTimeZone,
|
|
31
|
+
formatTimeInTimeZone,
|
|
32
|
+
fromZonedTime,
|
|
19
33
|
getAppId,
|
|
20
|
-
getAppIds
|
|
21
|
-
|
|
34
|
+
getAppIds,
|
|
35
|
+
getTimeZoneDifference,
|
|
36
|
+
getTimezoneAbbreviation,
|
|
37
|
+
getUserTimeZone,
|
|
38
|
+
roundToNearestMinutes,
|
|
39
|
+
toZonedTime
|
|
40
|
+
} from "./chunk-THRPYOFK.js";
|
|
22
41
|
import {
|
|
23
42
|
cn,
|
|
24
43
|
renderSafeHtml,
|
|
@@ -255,11 +274,11 @@ var secureEmailSchema = z.string().min(1, "Email is required").email("Invalid em
|
|
|
255
274
|
},
|
|
256
275
|
"Invalid email domain"
|
|
257
276
|
).transform((email) => sanitizeEmail(email));
|
|
258
|
-
var
|
|
259
|
-
var
|
|
260
|
-
var
|
|
261
|
-
var
|
|
262
|
-
var
|
|
277
|
+
var emailSchema2 = z.string().min(1, "Email is required").email("Invalid email format");
|
|
278
|
+
var nameSchema2 = z.string().min(1, "Name is required").max(100, "Name too long").regex(/^[a-zA-Z\s'-]+$/, "Name contains invalid characters");
|
|
279
|
+
var phoneSchema2 = z.string().regex(/^[\+]?[1-9][\d]{0,15}$/, "Invalid phone number format");
|
|
280
|
+
var urlSchema2 = z.string().url("Invalid URL format");
|
|
281
|
+
var dateSchema2 = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Invalid date format (YYYY-MM-DD)");
|
|
263
282
|
var secureLoginSchema2 = z.object({
|
|
264
283
|
email: secureEmailSchema,
|
|
265
284
|
password: z.string().min(1, "Password is required")
|
|
@@ -269,10 +288,10 @@ var secureLoginSchema2 = z.object({
|
|
|
269
288
|
function validateUserInput(schema, data, sanitizationRules) {
|
|
270
289
|
return sanitizeFormData(data, schema, sanitizationRules);
|
|
271
290
|
}
|
|
272
|
-
var
|
|
273
|
-
var
|
|
291
|
+
var emailSchema3 = z2.string().transform((email) => email.toLowerCase().trim()).pipe(z2.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long"));
|
|
292
|
+
var passwordSchema2 = 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");
|
|
274
293
|
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"));
|
|
275
|
-
var
|
|
294
|
+
var nameSchema3 = z2.string().min(1, "Name is required").max(100, "Name too long").refine((name) => {
|
|
276
295
|
const dangerousPatterns = [
|
|
277
296
|
/<script/i,
|
|
278
297
|
/<img/i,
|
|
@@ -287,11 +306,11 @@ var nameSchema2 = z2.string().min(1, "Name is required").max(100, "Name too long
|
|
|
287
306
|
maxLength: 100,
|
|
288
307
|
trim: true
|
|
289
308
|
}));
|
|
290
|
-
var
|
|
309
|
+
var phoneSchema3 = 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) => {
|
|
291
310
|
const digitsOnly = phone.replace(/\D/g, "");
|
|
292
311
|
return digitsOnly.length >= 10 && digitsOnly.length <= 15;
|
|
293
312
|
}, "Phone number must be between 10 and 15 digits");
|
|
294
|
-
var
|
|
313
|
+
var urlSchema3 = z2.string().min(1, "URL is required").max(2048, "URL too long").refine((url) => {
|
|
295
314
|
try {
|
|
296
315
|
const parsed = new URL(url);
|
|
297
316
|
return ["http:", "https:"].includes(parsed.protocol);
|
|
@@ -309,17 +328,6 @@ var urlSchema2 = z2.string().min(1, "URL is required").max(2048, "URL too long")
|
|
|
309
328
|
return !dangerousPatterns.some((pattern) => pattern.test(url));
|
|
310
329
|
}, "URL contains invalid protocol");
|
|
311
330
|
|
|
312
|
-
// src/utils/validation/common.ts
|
|
313
|
-
import { z as z3 } from "zod";
|
|
314
|
-
var emailSchema3 = z3.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long");
|
|
315
|
-
var nameSchema3 = z3.string().min(1, "Name is required").max(100, "Name too long").regex(/^[a-zA-Z\s'-]+$/, "Name contains invalid characters");
|
|
316
|
-
var phoneSchema3 = z3.string().regex(/^\+?[\d\s\-\(\)]+$/, "Invalid phone number format").min(10, "Phone number too short").max(20, "Phone number too long");
|
|
317
|
-
var urlSchema3 = z3.string().url("Invalid URL format").max(2048, "URL too long");
|
|
318
|
-
var dateSchema2 = z3.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format").refine((date) => {
|
|
319
|
-
const parsed = new Date(date);
|
|
320
|
-
return !isNaN(parsed.getTime());
|
|
321
|
-
}, "Invalid date");
|
|
322
|
-
|
|
323
331
|
// src/utils/validation/csrf.ts
|
|
324
332
|
var CSRFManager = class {
|
|
325
333
|
constructor() {
|
|
@@ -474,7 +482,7 @@ async function getCSRFToken(sessionId) {
|
|
|
474
482
|
}
|
|
475
483
|
|
|
476
484
|
// src/utils/validation/sqlInjectionProtection.ts
|
|
477
|
-
import { z as
|
|
485
|
+
import { z as z3 } from "zod";
|
|
478
486
|
var SQL_INJECTION_PATTERNS = [
|
|
479
487
|
/(\b(SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|EXEC|EXECUTE|UNION|SCRIPT|JAVASCRIPT)\b)/i,
|
|
480
488
|
/(\'|(\\\')|(\'\')|(\"|(\\\")|(\\")))|(\\x)|(\\u)/i,
|
|
@@ -496,13 +504,13 @@ var SQL_INJECTION_PATTERNS = [
|
|
|
496
504
|
/(%3B|;).+?(%44|%64|d)(%52|%72|r)(%4F|%6F|o)(%50|%70|p)/i
|
|
497
505
|
];
|
|
498
506
|
var DANGEROUS_CHARS = /[';\"\\%]/g;
|
|
499
|
-
var searchQuerySchema =
|
|
507
|
+
var searchQuerySchema = z3.string().max(500, "Search query too long").refine(
|
|
500
508
|
(query) => {
|
|
501
509
|
return !SQL_INJECTION_PATTERNS.some((pattern) => pattern.test(query));
|
|
502
510
|
},
|
|
503
511
|
"Invalid characters detected in search query"
|
|
504
512
|
).transform((query) => sanitizeSearchQuery(query));
|
|
505
|
-
var sqlIdentifierSchema =
|
|
513
|
+
var sqlIdentifierSchema = z3.string().min(1, "Identifier cannot be empty").max(63, "Identifier too long").regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/, "Invalid identifier format").refine(
|
|
506
514
|
(identifier) => {
|
|
507
515
|
const reservedWords = [
|
|
508
516
|
"SELECT",
|
|
@@ -524,8 +532,8 @@ var sqlIdentifierSchema = z4.string().min(1, "Identifier cannot be empty").max(6
|
|
|
524
532
|
},
|
|
525
533
|
"Identifier cannot be a reserved SQL keyword"
|
|
526
534
|
);
|
|
527
|
-
var orderBySchema =
|
|
528
|
-
var limitOffsetSchema =
|
|
535
|
+
var orderBySchema = z3.string().regex(/^[a-zA-Z_][a-zA-Z0-9_]*(\s+(ASC|DESC|asc|desc))?$/, "Invalid order by format");
|
|
536
|
+
var limitOffsetSchema = z3.number().int("Must be an integer").min(0, "Must be non-negative").max(1e3, "Limit too large");
|
|
529
537
|
function sanitizeSearchQuery(query) {
|
|
530
538
|
return query.replace(DANGEROUS_CHARS, "").replace(/\s+/g, " ").trim().slice(0, 500);
|
|
531
539
|
}
|
|
@@ -622,112 +630,27 @@ function detectSQLInjection(input) {
|
|
|
622
630
|
};
|
|
623
631
|
}
|
|
624
632
|
|
|
625
|
-
// src/utils/validation/passwordSchema.ts
|
|
626
|
-
import { z as z5 } from "zod";
|
|
627
|
-
var COMMON_PASSWORDS = /* @__PURE__ */ new Set([
|
|
628
|
-
"password",
|
|
629
|
-
"123456",
|
|
630
|
-
"123456789",
|
|
631
|
-
"qwerty",
|
|
632
|
-
"abc123",
|
|
633
|
-
"password123",
|
|
634
|
-
"admin",
|
|
635
|
-
"letmein",
|
|
636
|
-
"welcome",
|
|
637
|
-
"monkey",
|
|
638
|
-
"1234567890",
|
|
639
|
-
"password1"
|
|
640
|
-
]);
|
|
641
|
-
var WEAK_PATTERNS = [
|
|
642
|
-
/^(.)\1+$/,
|
|
643
|
-
// All same character
|
|
644
|
-
/^(012|123|234|345|456|567|678|789|890|987|876|765|654|543|432|321|210)+/,
|
|
645
|
-
// Sequential numbers
|
|
646
|
-
/^(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
|
|
647
|
-
// Sequential letters
|
|
648
|
-
];
|
|
649
|
-
var securePasswordSchema2 = z5.string().min(8, "Password must be at least 8 characters long").max(128, "Password must not exceed 128 characters").refine(
|
|
650
|
-
(password) => /[a-z]/.test(password),
|
|
651
|
-
"Password must contain at least one lowercase letter"
|
|
652
|
-
).refine(
|
|
653
|
-
(password) => /[A-Z]/.test(password),
|
|
654
|
-
"Password must contain at least one uppercase letter"
|
|
655
|
-
).refine(
|
|
656
|
-
(password) => /\d/.test(password),
|
|
657
|
-
"Password must contain at least one number"
|
|
658
|
-
).refine(
|
|
659
|
-
(password) => /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password),
|
|
660
|
-
"Password must contain at least one special character"
|
|
661
|
-
).refine(
|
|
662
|
-
(password) => !COMMON_PASSWORDS.has(password.toLowerCase()),
|
|
663
|
-
"Password is too common. Please choose a stronger password"
|
|
664
|
-
).refine(
|
|
665
|
-
(password) => !WEAK_PATTERNS.some((pattern) => pattern.test(password)),
|
|
666
|
-
"Password contains weak patterns. Please choose a more complex password"
|
|
667
|
-
).refine(
|
|
668
|
-
(password) => {
|
|
669
|
-
const keyboardPatterns = ["qwerty", "asdfgh", "zxcvbn", "1234567890"];
|
|
670
|
-
return !keyboardPatterns.some(
|
|
671
|
-
(pattern) => password.toLowerCase().includes(pattern)
|
|
672
|
-
);
|
|
673
|
-
},
|
|
674
|
-
"Password contains keyboard patterns. Please choose a more secure password"
|
|
675
|
-
);
|
|
676
|
-
var passwordSchema2 = z5.string().min(6, "Password must be at least 6 characters long").max(128, "Password must not exceed 128 characters");
|
|
677
|
-
function calculatePasswordStrength(password) {
|
|
678
|
-
let score = 0;
|
|
679
|
-
const feedback = [];
|
|
680
|
-
if (password.length >= 8) score += 20;
|
|
681
|
-
else if (password.length >= 6) score += 10;
|
|
682
|
-
else feedback.push("Use at least 8 characters");
|
|
683
|
-
if (/[a-z]/.test(password)) score += 15;
|
|
684
|
-
else feedback.push("Add lowercase letters");
|
|
685
|
-
if (/[A-Z]/.test(password)) score += 15;
|
|
686
|
-
else feedback.push("Add uppercase letters");
|
|
687
|
-
if (/\d/.test(password)) score += 15;
|
|
688
|
-
else feedback.push("Add numbers");
|
|
689
|
-
if (/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password)) score += 15;
|
|
690
|
-
else feedback.push("Add special characters");
|
|
691
|
-
if (password.length >= 12) score += 10;
|
|
692
|
-
if (/[^a-zA-Z0-9]/.test(password)) score += 10;
|
|
693
|
-
if (COMMON_PASSWORDS.has(password.toLowerCase())) {
|
|
694
|
-
score -= 30;
|
|
695
|
-
feedback.push("Avoid common passwords");
|
|
696
|
-
}
|
|
697
|
-
if (WEAK_PATTERNS.some((pattern) => pattern.test(password))) {
|
|
698
|
-
score -= 20;
|
|
699
|
-
feedback.push("Avoid predictable patterns");
|
|
700
|
-
}
|
|
701
|
-
let level;
|
|
702
|
-
if (score < 30) level = "very-weak";
|
|
703
|
-
else if (score < 50) level = "weak";
|
|
704
|
-
else if (score < 70) level = "fair";
|
|
705
|
-
else if (score < 90) level = "good";
|
|
706
|
-
else level = "strong";
|
|
707
|
-
return { score: Math.max(0, Math.min(100, score)), feedback, level };
|
|
708
|
-
}
|
|
709
|
-
|
|
710
633
|
// src/utils/validation/user.ts
|
|
711
|
-
import { z as
|
|
712
|
-
var userProfileSchema2 =
|
|
713
|
-
name:
|
|
714
|
-
email:
|
|
715
|
-
phone:
|
|
716
|
-
website:
|
|
717
|
-
bio:
|
|
634
|
+
import { z as z4 } from "zod";
|
|
635
|
+
var userProfileSchema2 = z4.object({
|
|
636
|
+
name: nameSchema,
|
|
637
|
+
email: emailSchema,
|
|
638
|
+
phone: z4.string().optional(),
|
|
639
|
+
website: z4.string().url().optional(),
|
|
640
|
+
bio: z4.string().max(500).optional()
|
|
718
641
|
});
|
|
719
|
-
var userSettingsSchema =
|
|
720
|
-
notifications:
|
|
721
|
-
email:
|
|
722
|
-
push:
|
|
642
|
+
var userSettingsSchema = z4.object({
|
|
643
|
+
notifications: z4.object({
|
|
644
|
+
email: z4.boolean(),
|
|
645
|
+
push: z4.boolean()
|
|
723
646
|
}),
|
|
724
|
-
language:
|
|
647
|
+
language: z4.string()
|
|
725
648
|
});
|
|
726
|
-
var userPreferencesSchema =
|
|
727
|
-
displayName:
|
|
728
|
-
timezone:
|
|
729
|
-
dateFormat:
|
|
730
|
-
currency:
|
|
649
|
+
var userPreferencesSchema = z4.object({
|
|
650
|
+
displayName: nameSchema,
|
|
651
|
+
timezone: z4.string(),
|
|
652
|
+
dateFormat: z4.string(),
|
|
653
|
+
currency: z4.string()
|
|
731
654
|
});
|
|
732
655
|
|
|
733
656
|
// src/utils/security/security.ts
|
|
@@ -1018,7 +941,7 @@ function createLazyComponent(importFn, componentName, options = {}) {
|
|
|
1018
941
|
return WrappedComponent;
|
|
1019
942
|
}
|
|
1020
943
|
var LazyDataTable = createLazyComponent(
|
|
1021
|
-
() => import("./DataTable-
|
|
944
|
+
() => import("./DataTable-IX2NBUTP.js").then((module) => ({ default: module.DataTable })),
|
|
1022
945
|
"DataTable"
|
|
1023
946
|
);
|
|
1024
947
|
|
|
@@ -1280,6 +1203,57 @@ function generateFallbackFingerprint() {
|
|
|
1280
1203
|
// Low entropy for fallback
|
|
1281
1204
|
};
|
|
1282
1205
|
}
|
|
1206
|
+
|
|
1207
|
+
// src/utils/location/location.ts
|
|
1208
|
+
function formatCoordinates(coords) {
|
|
1209
|
+
if (!coords || typeof coords.lat !== "number" || typeof coords.lng !== "number") {
|
|
1210
|
+
return "N/A";
|
|
1211
|
+
}
|
|
1212
|
+
if (!isFinite(coords.lat) || !isFinite(coords.lng)) {
|
|
1213
|
+
return "N/A";
|
|
1214
|
+
}
|
|
1215
|
+
return `${coords.lat.toFixed(6)}, ${coords.lng.toFixed(6)}`;
|
|
1216
|
+
}
|
|
1217
|
+
function hasValidCoordinates(coords) {
|
|
1218
|
+
if (!coords) {
|
|
1219
|
+
return false;
|
|
1220
|
+
}
|
|
1221
|
+
const { lat, lng } = coords;
|
|
1222
|
+
if (typeof lat !== "number" || typeof lng !== "number") {
|
|
1223
|
+
return false;
|
|
1224
|
+
}
|
|
1225
|
+
if (!isFinite(lat) || !isFinite(lng)) {
|
|
1226
|
+
return false;
|
|
1227
|
+
}
|
|
1228
|
+
if (lat < -90 || lat > 90) {
|
|
1229
|
+
return false;
|
|
1230
|
+
}
|
|
1231
|
+
if (lng < -180 || lng > 180) {
|
|
1232
|
+
return false;
|
|
1233
|
+
}
|
|
1234
|
+
return true;
|
|
1235
|
+
}
|
|
1236
|
+
function areCoordinatesEqual(coords1, coords2, tolerance = 1e-4) {
|
|
1237
|
+
if (!coords1 && !coords2) {
|
|
1238
|
+
return true;
|
|
1239
|
+
}
|
|
1240
|
+
if (!coords1 || !coords2) {
|
|
1241
|
+
return false;
|
|
1242
|
+
}
|
|
1243
|
+
if (!hasValidCoordinates(coords1) || !hasValidCoordinates(coords2)) {
|
|
1244
|
+
return false;
|
|
1245
|
+
}
|
|
1246
|
+
const epsilon = 1e-10;
|
|
1247
|
+
const latDiff = Math.abs(coords1.lat - coords2.lat);
|
|
1248
|
+
const lngDiff = Math.abs(coords1.lng - coords2.lng);
|
|
1249
|
+
return latDiff <= tolerance + epsilon && lngDiff <= tolerance + epsilon;
|
|
1250
|
+
}
|
|
1251
|
+
function getGoogleMapsUrl(coords) {
|
|
1252
|
+
if (!coords || !hasValidCoordinates(coords)) {
|
|
1253
|
+
return "";
|
|
1254
|
+
}
|
|
1255
|
+
return `https://www.google.com/maps/search/?api=1&query=${coords.lat},${coords.lng}`;
|
|
1256
|
+
}
|
|
1283
1257
|
export {
|
|
1284
1258
|
CachedAppIdResolver,
|
|
1285
1259
|
DebugLogger,
|
|
@@ -1289,6 +1263,7 @@ export {
|
|
|
1289
1263
|
PERFORMANCE_BUDGETS,
|
|
1290
1264
|
PERFORMANCE_THRESHOLDS,
|
|
1291
1265
|
PermissionType,
|
|
1266
|
+
areCoordinatesEqual,
|
|
1292
1267
|
auditLog,
|
|
1293
1268
|
auditLogger,
|
|
1294
1269
|
buildSafeQueryParams,
|
|
@@ -1305,19 +1280,27 @@ export {
|
|
|
1305
1280
|
createLogger,
|
|
1306
1281
|
createPerformanceBenchmark,
|
|
1307
1282
|
csrfManager,
|
|
1308
|
-
|
|
1283
|
+
dateSchema,
|
|
1309
1284
|
deepMerge,
|
|
1310
1285
|
detectSQLInjection,
|
|
1311
|
-
|
|
1286
|
+
emailSchema,
|
|
1312
1287
|
escapeLikeQuery,
|
|
1313
1288
|
formatCompactNumber,
|
|
1289
|
+
formatCoordinates,
|
|
1314
1290
|
formatCurrency,
|
|
1315
1291
|
formatDate,
|
|
1292
|
+
formatDateOnlyForDisplay,
|
|
1316
1293
|
formatDateTime,
|
|
1294
|
+
formatDateTimeForDisplay,
|
|
1295
|
+
formatDateTimeForMap,
|
|
1296
|
+
formatDateTimeForTable,
|
|
1317
1297
|
formatFileSize,
|
|
1298
|
+
formatInTimeZone,
|
|
1318
1299
|
formatNumber,
|
|
1319
1300
|
formatPercent,
|
|
1320
1301
|
formatTime,
|
|
1302
|
+
formatTimeInTimeZone,
|
|
1303
|
+
fromZonedTime,
|
|
1321
1304
|
generateCSRFToken,
|
|
1322
1305
|
generateDeviceFingerprint,
|
|
1323
1306
|
getAppConfig,
|
|
@@ -1331,11 +1314,16 @@ export {
|
|
|
1331
1314
|
getCurrentAppId,
|
|
1332
1315
|
getCurrentAppName,
|
|
1333
1316
|
getCurrentAppNameWithFallback,
|
|
1317
|
+
getGoogleMapsUrl,
|
|
1334
1318
|
getOrganisationContext,
|
|
1335
1319
|
getSecurityHeaders,
|
|
1320
|
+
getTimeZoneDifference,
|
|
1321
|
+
getTimezoneAbbreviation,
|
|
1322
|
+
getUserTimeZone,
|
|
1336
1323
|
hasAllPermissions,
|
|
1337
1324
|
hasAnyPermission,
|
|
1338
1325
|
hasPermission,
|
|
1326
|
+
hasValidCoordinates,
|
|
1339
1327
|
isEmpty,
|
|
1340
1328
|
isObject,
|
|
1341
1329
|
isOrganisationContextAvailable,
|
|
@@ -1363,16 +1351,17 @@ export {
|
|
|
1363
1351
|
loginSchema,
|
|
1364
1352
|
matchesPattern,
|
|
1365
1353
|
measureRenderPerformance,
|
|
1366
|
-
|
|
1354
|
+
nameSchema,
|
|
1367
1355
|
orderBySchema,
|
|
1368
1356
|
parsePermission,
|
|
1369
1357
|
passwordResetSchema,
|
|
1370
|
-
|
|
1358
|
+
passwordSchema,
|
|
1371
1359
|
performanceBudgetMonitor,
|
|
1372
|
-
|
|
1360
|
+
phoneSchema,
|
|
1373
1361
|
pickSchema,
|
|
1374
1362
|
registrationSchema,
|
|
1375
1363
|
renderSafeHtml,
|
|
1364
|
+
roundToNearestMinutes,
|
|
1376
1365
|
sanitizeFilters,
|
|
1377
1366
|
sanitizeFormData,
|
|
1378
1367
|
sanitizeHtml,
|
|
@@ -1386,9 +1375,10 @@ export {
|
|
|
1386
1375
|
setOrganisationContext,
|
|
1387
1376
|
setRBACAppName,
|
|
1388
1377
|
sqlIdentifierSchema,
|
|
1378
|
+
toZonedTime,
|
|
1389
1379
|
trackDynamicImport,
|
|
1390
1380
|
transformPermissionMapToBoolean,
|
|
1391
|
-
|
|
1381
|
+
urlSchema,
|
|
1392
1382
|
useComponentPerformance,
|
|
1393
1383
|
useSessionTracking,
|
|
1394
1384
|
userPreferencesSchema,
|