@jmruthers/pace-core 0.5.15 → 0.5.17
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/dist/{chunk-MQGGT7FF.js → chunk-S7KTIIL3.js} +26 -12
- package/dist/chunk-S7KTIIL3.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/rbac/index.js +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +1 -1
- 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/PublicErrorBoundary.md +1 -1
- package/docs/api/classes/RBACAuditManager.md +1 -1
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +1 -1
- package/docs/api/classes/RBACError.md +1 -1
- package/docs/api/classes/RBACNotInitializedError.md +1 -1
- package/docs/api/classes/SecureSupabaseClient.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +1 -1
- 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/DataAccessRecord.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/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventContextType.md +1 -1
- package/docs/api/interfaces/EventLogoProps.md +1 -1
- package/docs/api/interfaces/EventProviderProps.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +1 -1
- package/docs/api/interfaces/FooterProps.md +1 -1
- 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/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 +1 -1
- 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 +1 -1
- 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/PublicErrorBoundaryProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
- 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/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACContextType.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACProviderProps.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- 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/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/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
- 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/UsePublicRouteParamsReturn.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 +2 -2
- package/package.json +1 -1
- package/src/rbac/components/PagePermissionGuard.tsx +34 -12
- package/dist/chunk-MQGGT7FF.js.map +0 -1
- package/src/validation/__tests__/passwordSchema.unit.test 2.ts +0 -98
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { passwordSchema, securePasswordSchema, calculatePasswordStrength } from '../passwordSchema';
|
|
3
|
-
|
|
4
|
-
describe('Password Validation Schemas', () => {
|
|
5
|
-
describe('passwordSchema (Basic)', () => {
|
|
6
|
-
it('should validate passwords with minimum length', () => {
|
|
7
|
-
expect(passwordSchema.safeParse('123456').success).toBe(true);
|
|
8
|
-
expect(passwordSchema.safeParse('password').success).toBe(true);
|
|
9
|
-
expect(passwordSchema.safeParse('StrongPass123!').success).toBe(true);
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
it('should reject passwords that are too short', () => {
|
|
13
|
-
expect(passwordSchema.safeParse('12345').success).toBe(false);
|
|
14
|
-
expect(passwordSchema.safeParse('').success).toBe(false);
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('should reject passwords that are too long', () => {
|
|
18
|
-
const longPassword = 'a'.repeat(129);
|
|
19
|
-
expect(passwordSchema.safeParse(longPassword).success).toBe(false);
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
describe('securePasswordSchema (Strict)', () => {
|
|
24
|
-
it('should validate strong passwords', () => {
|
|
25
|
-
expect(securePasswordSchema.safeParse('StrongPass123!').success).toBe(true);
|
|
26
|
-
expect(securePasswordSchema.safeParse('Complex@Password1').success).toBe(true);
|
|
27
|
-
expect(securePasswordSchema.safeParse('MySecureP@ssw0rd').success).toBe(true);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('should reject weak passwords', () => {
|
|
31
|
-
expect(securePasswordSchema.safeParse('weak').success).toBe(false);
|
|
32
|
-
expect(securePasswordSchema.safeParse('12345678').success).toBe(false);
|
|
33
|
-
expect(securePasswordSchema.safeParse('').success).toBe(false);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('should reject passwords without uppercase letters', () => {
|
|
37
|
-
expect(securePasswordSchema.safeParse('password123!').success).toBe(false);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('should reject passwords without lowercase letters', () => {
|
|
41
|
-
expect(securePasswordSchema.safeParse('PASSWORD123!').success).toBe(false);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('should reject passwords without numbers', () => {
|
|
45
|
-
expect(securePasswordSchema.safeParse('Password!').success).toBe(false);
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
it('should reject passwords without special characters', () => {
|
|
49
|
-
expect(securePasswordSchema.safeParse('Password123').success).toBe(false);
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it('should reject passwords that are too short', () => {
|
|
53
|
-
expect(securePasswordSchema.safeParse('Pass1!').success).toBe(false);
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it('should reject common passwords', () => {
|
|
57
|
-
expect(securePasswordSchema.safeParse('password').success).toBe(false);
|
|
58
|
-
expect(securePasswordSchema.safeParse('123456').success).toBe(false);
|
|
59
|
-
expect(securePasswordSchema.safeParse('qwerty').success).toBe(false);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it('should provide meaningful error messages', () => {
|
|
63
|
-
const result = securePasswordSchema.safeParse('weak');
|
|
64
|
-
expect(result.success).toBe(false);
|
|
65
|
-
if (!result.success) {
|
|
66
|
-
expect(result.error.issues.length).toBeGreaterThan(0);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
describe('calculatePasswordStrength', () => {
|
|
72
|
-
it('should calculate strength for strong passwords', () => {
|
|
73
|
-
const result = calculatePasswordStrength('StrongPass123!');
|
|
74
|
-
expect(result.score).toBeGreaterThan(70);
|
|
75
|
-
expect(result.level).toBe('strong');
|
|
76
|
-
expect(result.feedback).toHaveLength(0);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
it('should calculate strength for weak passwords', () => {
|
|
80
|
-
const result = calculatePasswordStrength('weak');
|
|
81
|
-
expect(result.score).toBeLessThan(50);
|
|
82
|
-
expect(result.level).toBe('very-weak');
|
|
83
|
-
expect(result.feedback.length).toBeGreaterThan(0);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('should provide feedback for improvement', () => {
|
|
87
|
-
const result = calculatePasswordStrength('password');
|
|
88
|
-
expect(result.feedback).toContain('Add uppercase letters');
|
|
89
|
-
expect(result.feedback).toContain('Add numbers');
|
|
90
|
-
expect(result.feedback).toContain('Add special characters');
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
it('should penalize common passwords', () => {
|
|
94
|
-
const result = calculatePasswordStrength('password');
|
|
95
|
-
expect(result.feedback).toContain('Avoid common passwords');
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
});
|