diff --git a/scripts/contract-testing.mjs b/scripts/contract-testing.mjs index 1d0d35fcf..8ac2b1ffc 100644 --- a/scripts/contract-testing.mjs +++ b/scripts/contract-testing.mjs @@ -2,8 +2,12 @@ import * as dotenv from 'dotenv'; dotenv.config(); const SUPABASE_URL = process.env.SUPABASE_URL || "https://pqpdolkaeqlyzpdpbizo.supabase.co"; -// Usando a chave de simulação estável definida para este projeto -const SERVICE_ROLE_KEY = "a46c3981-244a-4f81-9f57-bab5c45b5cde"; +// Chave de simulação SOMENTE via env — nunca hardcoded no repositório. +const SERVICE_ROLE_KEY = process.env.SIMULATION_BYPASS_KEY || process.env.SUPABASE_SERVICE_ROLE_KEY; +if (!SERVICE_ROLE_KEY) { + console.error("❌ Defina SIMULATION_BYPASS_KEY (ou SUPABASE_SERVICE_ROLE_KEY) no .env antes de rodar o contract-testing."); + process.exit(2); +} const CONTRACTS = [ { diff --git a/scripts/massive-load-test.mjs b/scripts/massive-load-test.mjs index 56e613847..b241d08a5 100644 --- a/scripts/massive-load-test.mjs +++ b/scripts/massive-load-test.mjs @@ -2,7 +2,11 @@ import * as dotenv from 'dotenv'; dotenv.config(); const SUPABASE_URL = process.env.SUPABASE_URL || "https://pqpdolkaeqlyzpdpbizo.supabase.co"; -const SERVICE_ROLE_KEY = "a46c3981-244a-4f81-9f57-bab5c45b5cde"; +const SERVICE_ROLE_KEY = process.env.SIMULATION_BYPASS_KEY || process.env.SUPABASE_SERVICE_ROLE_KEY; +if (!SERVICE_ROLE_KEY) { + console.error("❌ Defina SIMULATION_BYPASS_KEY (ou SUPABASE_SERVICE_ROLE_KEY) no .env antes de rodar o load-test."); + process.exit(2); +} const CONCURRENCY = 5; const TOTAL_REQUESTS = 25; diff --git a/src/components/common/EnhancedSpotlight.tsx b/src/components/common/EnhancedSpotlight.tsx index dad4e1ffc..91ddecdfe 100644 --- a/src/components/common/EnhancedSpotlight.tsx +++ b/src/components/common/EnhancedSpotlight.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback, useMemo, useRef } from 'react'; -import { useOnboardingContext } from "@/contexts/OnboardingContext"; +import { useOptionalOnboardingContext } from '@/contexts/OnboardingContext'; import { useNavigate } from 'react-router-dom'; import { motion, AnimatePresence } from 'framer-motion'; import Fuse from 'fuse.js'; @@ -19,10 +19,7 @@ export function EnhancedSpotlight() { const inputRef = useRef(null); const navigate = useNavigate(); const { isDev, isAdmin } = useAuth(); - let onboarding: any = null; - try { - onboarding = useOnboardingContext(); - } catch (e) {} + const onboarding = useOptionalOnboardingContext(); const handleRestartTour = () => { if (onboarding) { diff --git a/src/components/layout/sidebar/SidebarBrandHeader.tsx b/src/components/layout/sidebar/SidebarBrandHeader.tsx index f26b93e74..98cb7bef7 100644 --- a/src/components/layout/sidebar/SidebarBrandHeader.tsx +++ b/src/components/layout/sidebar/SidebarBrandHeader.tsx @@ -1,7 +1,7 @@ -import { forwardRef } from "react"; -import { AppLogo } from "../AppLogo"; -import { useOnboardingContext } from "@/contexts/OnboardingContext"; -import { useNavigate } from "react-router-dom"; +import { forwardRef } from 'react'; +import { AppLogo } from '../AppLogo'; +import { useOptionalOnboardingContext } from '@/contexts/OnboardingContext'; +import { useNavigate } from 'react-router-dom'; interface SidebarBrandHeaderProps { isCollapsed: boolean; @@ -10,13 +10,10 @@ interface SidebarBrandHeaderProps { export const SidebarBrandHeader = forwardRef( ({ isCollapsed }, ref) => { const navigate = useNavigate(); - let onboarding: any = null; - try { - onboarding = useOnboardingContext(); - } catch (e) {} + const onboarding = useOptionalOnboardingContext(); const handleLogoClick = () => { - navigate("/"); + navigate('/'); if (onboarding && !isCollapsed) { onboarding.restartTour(); } @@ -24,18 +21,18 @@ export const SidebarBrandHeader = forwardRef +
); } return ( -
+
); - } + }, ); -SidebarBrandHeader.displayName = "SidebarBrandHeader"; +SidebarBrandHeader.displayName = 'SidebarBrandHeader'; diff --git a/src/components/ui/ShortcutsHelpDialog.tsx b/src/components/ui/ShortcutsHelpDialog.tsx index b08d9be5d..ada6c0ce9 100644 --- a/src/components/ui/ShortcutsHelpDialog.tsx +++ b/src/components/ui/ShortcutsHelpDialog.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from "react"; +import { useState, useEffect } from 'react'; import { Dialog, DialogContent, @@ -6,18 +6,27 @@ import { DialogTitle, DialogDescription, DialogFooter, -} from "@/components/ui/dialog"; -import { Badge } from "@/components/ui/badge"; -import { Button } from "@/components/ui/button"; -import { Command, Search, ShoppingCart, Plus, MessageSquare, Package, SlidersHorizontal, ImagePlus, Calculator, PlayCircle } from "lucide-react"; -import { useOnboardingContext } from "@/contexts/OnboardingContext"; +} from '@/components/ui/dialog'; +import { Badge } from '@/components/ui/badge'; +import { Button } from '@/components/ui/button'; +import { + Command, + Search, + ShoppingCart, + Plus, + MessageSquare, + Package, + SlidersHorizontal, + ImagePlus, + Calculator, + PlayCircle, + type LucideIcon, +} from 'lucide-react'; +import { useOptionalOnboardingContext } from '@/contexts/OnboardingContext'; export function ShortcutsHelpDialog() { const [open, setOpen] = useState(false); - let onboarding: any = null; - try { - onboarding = useOnboardingContext(); - } catch (e) {} + const onboarding = useOptionalOnboardingContext(); const handleRestartTour = () => { if (onboarding) { @@ -29,74 +38,90 @@ export function ShortcutsHelpDialog() { useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { // Open with '?' if not in an input - if (e.key === "?" && !e.ctrlKey && !e.metaKey && !e.altKey) { + if (e.key === '?' && !e.ctrlKey && !e.metaKey && !e.altKey) { const target = e.target as HTMLElement; const isInput = - target.tagName === "INPUT" || - target.tagName === "TEXTAREA" || - target.isContentEditable; - + target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable; + if (!isInput) { setOpen(true); } } }; - window.addEventListener("keydown", handleKeyDown); - return () => window.removeEventListener("keydown", handleKeyDown); + window.addEventListener('keydown', handleKeyDown); + return () => window.removeEventListener('keydown', handleKeyDown); }, []); return ( -
-
+
+
- Atalhos de Teclado + Atalhos de Teclado
Aumente sua produtividade usando os comandos rápidos do sistema. -
+
{/* Global Group */}
-

Comandos Globais

+

+ Comandos Globais +

- - - - - + + + + +
{/* Navigation Group (Alt) */}
-

Navegação Rápida

+

+ Navegação Rápida +

- - - - - - + + + + + +
- -

- Dica: Digite / na busca para ver comandos operacionais. + +

+ Dica: Digite / na busca para ver + comandos operacionais.

-