From a24baecf225e337b8743ad8be3e64170db0a5dcd Mon Sep 17 00:00:00 2001 From: Mariano Date: Thu, 7 May 2026 13:36:24 +0100 Subject: [PATCH] fix: revert page-level hooks to useRealtimeRun to fix missing auth context MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit useRun requires a TriggerProvider with an access token. When there's no active onboarding (no triggerJobId), the TriggerTokenProvider renders children without a TriggerProvider, causing useRun to throw "Missing accessToken in TriggerAuthContext." Reverted policies-table, use-policy-onboarding-status, and use-onboarding-status back to useRealtimeRun which gracefully handles missing auth context via the enabled flag. For ToDoOverview, removed the trigger hook entirely — it only needs a boolean "is onboarding running" which can be derived from the triggerJobId prop. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../overview/components/ToDoOverview.tsx | 21 +------------------ .../hooks/use-policy-onboarding-status.ts | 6 +++--- .../all/components/policies-table.tsx | 6 +++--- .../(overview)/hooks/use-onboarding-status.ts | 6 +++--- 4 files changed, 10 insertions(+), 29 deletions(-) diff --git a/apps/app/src/app/(app)/[orgId]/overview/components/ToDoOverview.tsx b/apps/app/src/app/(app)/[orgId]/overview/components/ToDoOverview.tsx index 7645fca14b..22f77e6dcc 100644 --- a/apps/app/src/app/(app)/[orgId]/overview/components/ToDoOverview.tsx +++ b/apps/app/src/app/(app)/[orgId]/overview/components/ToDoOverview.tsx @@ -5,7 +5,6 @@ import { Card, CardContent, CardHeader, CardTitle } from '@trycompai/ui/card'; import { ScrollArea } from '@trycompai/ui/scroll-area'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@trycompai/ui/tabs'; import { Policy, Task } from '@db'; -import { useRun } from '@trigger.dev/react-hooks'; import { ArrowRight, CheckCircle2, @@ -49,25 +48,7 @@ export function ToDoOverview({ const [isConfirmDialogOpen, setIsConfirmDialogOpen] = useState(false); const [isLoading, setIsLoading] = useState(false); - const { run: onboardingRun } = useRun(onboardingTriggerJobId || '', { - refreshInterval: 1000, - }); - - const IN_PROGRESS_STATUSES = [ - 'QUEUED', - 'EXECUTING', - 'WAITING_FOR_DEPLOY', - 'REATTEMPTING', - 'FROZEN', - 'DELAYED', - 'WAITING', - 'PENDING_VERSION', - 'DEQUEUED', - ]; - - const isOnboardingInProgress = onboardingRun - ? IN_PROGRESS_STATUSES.includes(onboardingRun.status) - : false; + const isOnboardingInProgress = !!onboardingTriggerJobId; const formatStatus = (status: string) => { return status.replace('_', ' ').replace(/\b\w/g, (l) => l.toUpperCase()); diff --git a/apps/app/src/app/(app)/[orgId]/policies/(overview)/hooks/use-policy-onboarding-status.ts b/apps/app/src/app/(app)/[orgId]/policies/(overview)/hooks/use-policy-onboarding-status.ts index b3f8e203d6..9ecf5944f8 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/(overview)/hooks/use-policy-onboarding-status.ts +++ b/apps/app/src/app/(app)/[orgId]/policies/(overview)/hooks/use-policy-onboarding-status.ts @@ -1,6 +1,6 @@ 'use client'; -import { useRun } from '@trigger.dev/react-hooks'; +import { useRealtimeRun } from '@trigger.dev/react-hooks'; import { useMemo } from 'react'; import type { PolicyTailoringStatus } from '../../all/components/policy-tailoring-context'; @@ -20,8 +20,8 @@ export function usePolicyOnboardingStatus( onboardingRunId: string | null | undefined, ) { const shouldSubscribe = Boolean(onboardingRunId); - const { run } = useRun(shouldSubscribe ? onboardingRunId! : '', { - refreshInterval: 1000, + const { run } = useRealtimeRun(shouldSubscribe ? onboardingRunId! : '', { + enabled: shouldSubscribe, }); const itemStatuses = useMemo>(() => { diff --git a/apps/app/src/app/(app)/[orgId]/policies/all/components/policies-table.tsx b/apps/app/src/app/(app)/[orgId]/policies/all/components/policies-table.tsx index a86d1deaf4..81bd08465a 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/all/components/policies-table.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/all/components/policies-table.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useRun } from '@trigger.dev/react-hooks'; +import { useRealtimeRun } from '@trigger.dev/react-hooks'; import { Download, Loader2 } from 'lucide-react'; import * as React from 'react'; import { toast } from 'sonner'; @@ -31,8 +31,8 @@ export function PoliciesTable({ promises, onboardingRunId }: PoliciesTableProps) const orgId = params.orgId as string; const shouldSubscribeToRun = Boolean(onboardingRunId); - const { run } = useRun(shouldSubscribeToRun ? onboardingRunId! : '', { - refreshInterval: 1000, + const { run } = useRealtimeRun(shouldSubscribeToRun ? onboardingRunId! : '', { + enabled: shouldSubscribeToRun, }); const policyStatuses = React.useMemo(() => { diff --git a/apps/app/src/app/(app)/[orgId]/risk/(overview)/hooks/use-onboarding-status.ts b/apps/app/src/app/(app)/[orgId]/risk/(overview)/hooks/use-onboarding-status.ts index d3661d0831..5b53b1975f 100644 --- a/apps/app/src/app/(app)/[orgId]/risk/(overview)/hooks/use-onboarding-status.ts +++ b/apps/app/src/app/(app)/[orgId]/risk/(overview)/hooks/use-onboarding-status.ts @@ -1,6 +1,6 @@ 'use client'; -import { useRun } from '@trigger.dev/react-hooks'; +import { useRealtimeRun } from '@trigger.dev/react-hooks'; import { useMemo } from 'react'; export type OnboardingItemStatus = 'pending' | 'processing' | 'created' | 'assessing' | 'completed'; @@ -15,8 +15,8 @@ export function useOnboardingStatus( itemType: 'risks' | 'vendors', ) { const shouldSubscribe = Boolean(onboardingRunId); - const { run } = useRun(shouldSubscribe ? onboardingRunId! : '', { - refreshInterval: 1000, + const { run } = useRealtimeRun(shouldSubscribe ? onboardingRunId! : '', { + enabled: shouldSubscribe, }); const itemStatuses = useMemo>(() => {