diff --git a/apps/formbricks-com/pages/api/oss-friends/index.ts b/apps/formbricks-com/pages/api/oss-friends/index.ts index fafd2eb74f..ac6c5e786a 100644 --- a/apps/formbricks-com/pages/api/oss-friends/index.ts +++ b/apps/formbricks-com/pages/api/oss-friends/index.ts @@ -111,8 +111,7 @@ export default async function handle(req: NextApiRequest, res: NextApiResponse) }, { name: "Langfuse", - description: - "Open source LLM engineering platform. Debug, analyze and iterate together.", + description: "Open source LLM engineering platform. Debug, analyze and iterate together.", href: "https://langfuse.com", }, { diff --git a/apps/web/app/(app)/share/[sharingKey]/(analysis)/components/SurveyResultsTabs.tsx b/apps/web/app/(app)/share/[sharingKey]/(analysis)/components/SurveyResultsTabs.tsx index a02d75d220..6366ffdbdc 100644 --- a/apps/web/app/(app)/share/[sharingKey]/(analysis)/components/SurveyResultsTabs.tsx +++ b/apps/web/app/(app)/share/[sharingKey]/(analysis)/components/SurveyResultsTabs.tsx @@ -1,7 +1,8 @@ -import { cn } from "@formbricks/lib/cn"; -import { PresentationChartLineIcon, InboxStackIcon } from "@heroicons/react/24/solid"; -import Link from "next/link"; import revalidateSurveyIdPath from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/actions"; +import { InboxStackIcon, PresentationChartLineIcon } from "@heroicons/react/24/solid"; +import Link from "next/link"; + +import { cn } from "@formbricks/lib/cn"; interface SurveyResultsTabProps { activeId: string; diff --git a/apps/web/app/(app)/share/[sharingKey]/(analysis)/responses/actions.ts b/apps/web/app/(app)/share/[sharingKey]/(analysis)/responses/actions.ts index 321c3cfa57..9a0afd22d1 100644 --- a/apps/web/app/(app)/share/[sharingKey]/(analysis)/responses/actions.ts +++ b/apps/web/app/(app)/share/[sharingKey]/(analysis)/responses/actions.ts @@ -1,11 +1,13 @@ "use server"; -import { createTag } from "@formbricks/lib/tag/service"; -import { addTagToRespone, deleteTagOnResponse } from "@formbricks/lib/tagOnResponse/service"; -import { hasUserEnvironmentAccess } from "@formbricks/lib/environment/auth"; -import { authOptions } from "@formbricks/lib/authOptions"; + import { getServerSession } from "next-auth"; -import { AuthorizationError } from "@formbricks/types/errors"; + +import { authOptions } from "@formbricks/lib/authOptions"; +import { hasUserEnvironmentAccess } from "@formbricks/lib/environment/auth"; +import { createTag } from "@formbricks/lib/tag/service"; import { canUserAccessTagOnResponse } from "@formbricks/lib/tagOnResponse/auth"; +import { addTagToRespone, deleteTagOnResponse } from "@formbricks/lib/tagOnResponse/service"; +import { AuthorizationError } from "@formbricks/types/errors"; export const createTagAction = async (environmentId: string, tagName: string) => { const session = await getServerSession(authOptions); diff --git a/packages/js/src/lib/commandQueue.ts b/packages/js/src/lib/commandQueue.ts index c72e4626f8..65b7258960 100644 --- a/packages/js/src/lib/commandQueue.ts +++ b/packages/js/src/lib/commandQueue.ts @@ -1,3 +1,5 @@ +import { wrapThrowsAsync } from "@formbricks/types/errorHandlers"; + import { ErrorHandler, Result } from "./errors"; import { checkInitialized } from "./initialize"; @@ -47,11 +49,23 @@ export class CommandQueue { if (initResult && initResult.ok !== true) errorHandler.handle(initResult.error); } - const result = (await currentItem?.command.apply(null, currentItem?.commandArgs)) as Result; + const executeCommand = async () => { + return (await currentItem?.command.apply(null, currentItem?.commandArgs)) as Result; + }; + + const result = await wrapThrowsAsync(executeCommand)(); if (!result) continue; - if (result.ok !== true) errorHandler.handle(result.error); + if (result.ok) { + if (!result.data.ok) { + errorHandler.handle(result.data.error); + } + } + + if (result.ok !== true) { + errorHandler.handle(result.error); + } } this.running = false; if (this.resolvePromise) { diff --git a/packages/js/src/lib/errors.ts b/packages/js/src/lib/errors.ts index b7e8d93549..a946f0042a 100644 --- a/packages/js/src/lib/errors.ts +++ b/packages/js/src/lib/errors.ts @@ -132,6 +132,7 @@ export class ErrorHandler { } public handle(error: any): void { + console.warn("🧱 Formbricks - Global error: ", error); this.handleError(error); } } diff --git a/packages/types/errorHandlers.ts b/packages/types/errorHandlers.ts index 64a6e3cabc..e48e3c3120 100644 --- a/packages/types/errorHandlers.ts +++ b/packages/types/errorHandlers.ts @@ -123,3 +123,19 @@ export const wrapThrows = }; } }; + +export const wrapThrowsAsync = + (fn: (...args: A) => Promise) => + async (...args: A): Promise> => { + try { + return { + ok: true, + data: await fn(...args), + }; + } catch (error) { + return { + ok: false, + error: error as Error, + }; + } + };