diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 53a18cf16fd..5d906dc709a 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -116,6 +116,9 @@ jobs: - name: API contract boundary audit run: bun run check:api-validation:strict + - name: Shared utils enforcement audit + run: bun run check:utils + - name: Zustand v5 selector audit run: bun run check:zustand-v5 diff --git a/apps/sim/app/(auth)/login/login-form.tsx b/apps/sim/app/(auth)/login/login-form.tsx index d0f1fa59a29..9fd5adb148c 100644 --- a/apps/sim/app/(auth)/login/login-form.tsx +++ b/apps/sim/app/(auth)/login/login-form.tsx @@ -11,6 +11,7 @@ import { } from '@sim/emcn' import { createLogger } from '@sim/logger' import { getErrorMessage } from '@sim/utils/errors' +import { normalizeEmail } from '@sim/utils/string' import { useRouter, useSearchParams } from 'next/navigation' import { requestJson } from '@/lib/api/client/request' import { forgetPasswordContract } from '@/lib/api/contracts' @@ -45,7 +46,7 @@ const validateEmailField = (emailValue: string): string[] => { return errors } - const validation = quickValidateEmail(emailValue.trim().toLowerCase()) + const validation = quickValidateEmail(normalizeEmail(emailValue)) if (!validation.isValid) { errors.push(validation.reason || 'Please enter a valid email address.') } @@ -159,7 +160,7 @@ export default function LoginPage({ const formData = new FormData(e.currentTarget) const emailRaw = formData.get('email') as string - const email = emailRaw.trim().toLowerCase() + const email = normalizeEmail(emailRaw) const emailValidationErrors = validateEmailField(email) setEmailErrors(emailValidationErrors) @@ -277,7 +278,7 @@ export default function LoginPage({ return } - const emailValidation = quickValidateEmail(forgotPasswordEmail.trim().toLowerCase()) + const emailValidation = quickValidateEmail(normalizeEmail(forgotPasswordEmail)) if (!emailValidation.isValid) { setResetStatus({ type: 'error', diff --git a/apps/sim/app/(interfaces)/resume/[workflowId]/[executionId]/resume-page-client.tsx b/apps/sim/app/(interfaces)/resume/[workflowId]/[executionId]/resume-page-client.tsx index e6bf318c428..88a7cf3edae 100644 --- a/apps/sim/app/(interfaces)/resume/[workflowId]/[executionId]/resume-page-client.tsx +++ b/apps/sim/app/(interfaces)/resume/[workflowId]/[executionId]/resume-page-client.tsx @@ -18,6 +18,7 @@ import { TableRow, Tooltip, } from '@sim/emcn' +import { formatDateTime } from '@sim/utils/formatting' import { useQueryClient } from '@tanstack/react-query' import { RefreshCw } from 'lucide-react' import { useRouter } from 'next/navigation' @@ -68,7 +69,7 @@ const STATUS_BADGE_VARIANT: Record(initialEntries) const [loading, setLoading] = useState(false) @@ -133,7 +126,9 @@ export function ChangelogTimeline({ initialEntries }: ChangelogTimelineProps) { ) : null} - {formatDate(entry.date)} + + {formatDate(new Date(entry.date))} +