diff --git a/packages/web/src/hooks/auditFrameGame/auditFrameGameService.ts b/packages/web/src/hooks/auditFrameGame/auditFrameGameService.ts index 9100764ec..91c945f0c 100644 --- a/packages/web/src/hooks/auditFrameGame/auditFrameGameService.ts +++ b/packages/web/src/hooks/auditFrameGame/auditFrameGameService.ts @@ -11,7 +11,8 @@ export async function optInToAuditCompetition(editSessionIdOrAddress: string): P }); return response.data.ok; } catch (error) { - console.log(error); + console.error("Error opting in to audit competition:", error); + // Don't throw, just return false to indicate failure return false; } } @@ -26,7 +27,8 @@ export async function optOutToAuditCompetition(editSessionIdOrAddress: string): }); return response.data.ok; } catch (error) { - console.log(error); + console.error("Error opting out from audit competition:", error); + // Don't throw, just return false to indicate failure return false; } } @@ -41,7 +43,8 @@ export async function getAllOptedInOnAuditCompetition(editSessionIdOrAddress?: s const response = await axiosClient.get(`${BASE_SERVICE_URL}/edit-session/${editSessionIdOrAddress}/list-opted-in-users`); return response.data.optedInUsers; } catch (error) { - console.log(error); + console.error("Error getting opted in users:", error); + // Don't throw, just return empty array to indicate no users return []; } } diff --git a/packages/web/src/pages/Submissions/SubmissionFormPage/SubmissionFormPage.tsx b/packages/web/src/pages/Submissions/SubmissionFormPage/SubmissionFormPage.tsx index f7e6af12b..b30dbcf89 100644 --- a/packages/web/src/pages/Submissions/SubmissionFormPage/SubmissionFormPage.tsx +++ b/packages/web/src/pages/Submissions/SubmissionFormPage/SubmissionFormPage.tsx @@ -198,12 +198,12 @@ export const SubmissionFormPage = () => { async (data: ISubmissionData) => { if (!vault || !data || !data.submissionResult) return; - setSubmissionData({ - ...data, - submissionResult: { ...data.submissionResult, botStatus: SubmissionOpStatus.Pending, auditCompetitionRepo: undefined }, - }); - try { + setSubmissionData({ + ...data, + submissionResult: { ...data.submissionResult, botStatus: SubmissionOpStatus.Pending, auditCompetitionRepo: undefined }, + }); + const res = await submitVulnerabilitySubmission(data, vault, hackerProfile); if (res.success) { @@ -215,71 +215,91 @@ export const SubmissionFormPage = () => { auditCompetitionRepo: res.auditCompetitionRepo, }, }); - } else throw new Error("Failed to submit vulnerability"); - } catch { + } else { + throw new Error("Failed to submit vulnerability"); + } + } catch (error) { + console.error("Error sending submission to server:", error); setSubmissionData({ ...data, submissionResult: { ...data.submissionResult, botStatus: SubmissionOpStatus.Fail, auditCompetitionRepo: undefined }, }); + confirm({ + title: t("serverSubmissionError"), + titleIcon: , + description: t("serverSubmissionErrorExplanation"), + confirmText: t("gotIt"), + }); } }, - [vault, hackerProfile] + [vault, hackerProfile, confirm, t] ); const submitSubmission = useCallback(async () => { if (!vault) return; if (!submissionData?.submissionsDescriptions?.submission) return; - // Check if vault requires message signature to submit - if (requireMessageSignature && !userHasCollectedSignature) { - const wantsToBeRedirected = await confirm({ - title: t("youNeedToSignMessageToSubmit"), - titleIcon: , - description: t("youNeedToSignMessageToSubmitExplanation"), - cancelText: t("close"), - confirmText: t("gotIt"), - }); + try { + // Check if vault requires message signature to submit + if (requireMessageSignature && !userHasCollectedSignature) { + const wantsToBeRedirected = await confirm({ + title: t("youNeedToSignMessageToSubmit"), + titleIcon: , + description: t("youNeedToSignMessageToSubmitExplanation"), + cancelText: t("close"), + confirmText: t("gotIt"), + }); - if (!wantsToBeRedirected) return; + if (!wantsToBeRedirected) return; - const isAudit = vault?.description?.["project-metadata"].type === "audit"; - const name = vault?.description?.["project-metadata"].name ?? ""; + const isAudit = vault?.description?.["project-metadata"].type === "audit"; + const name = vault?.description?.["project-metadata"].name ?? ""; - const mainRoute = `/${isAudit ? HoneypotsRoutePaths.audits : HoneypotsRoutePaths.bugBounties}`; - const vaultSlug = slugify(name); + const mainRoute = `/${isAudit ? HoneypotsRoutePaths.audits : HoneypotsRoutePaths.bugBounties}`; + const vaultSlug = slugify(name); - return navigate(`${mainRoute}/${vaultSlug}-${vault.id}`); - } + return navigate(`${mainRoute}/${vaultSlug}-${vault.id}`); + } - const submission = submissionData?.submissionsDescriptions?.submission; - const calculatedCid = await calcCid(submission); + const submission = submissionData?.submissionsDescriptions?.submission; + const calculatedCid = await calcCid(submission); - if (submissionData.ref === "audit-wizard") { - if (!submissionData.auditWizardData) return; - // Verify if the submission was not changed and validate the signature - const auditwizardSubmission = getCurrentAuditwizardSubmission(submissionData.auditWizardData, submissionData); + if (submissionData.ref === "audit-wizard") { + if (!submissionData.auditWizardData) return; + // Verify if the submission was not changed and validate the signature + const auditwizardSubmission = getCurrentAuditwizardSubmission(submissionData.auditWizardData, submissionData); - if (JSON.stringify(submissionData.auditWizardData) !== JSON.stringify(auditwizardSubmission)) { - return confirm({ - title: t("submissionChanged"), - titleIcon: , - description: t("submissionChangedExplanationAuditWizard"), - confirmText: t("gotIt"), - }); - } + if (JSON.stringify(submissionData.auditWizardData) !== JSON.stringify(auditwizardSubmission)) { + return confirm({ + title: t("submissionChanged"), + titleIcon: , + description: t("submissionChangedExplanationAuditWizard"), + confirmText: t("gotIt"), + }); + } - const res = await verifyAuditWizardSignature(auditwizardSubmission); - if (!res) { - return confirm({ - title: t("submissionNotValid"), - titleIcon: , - description: t("submissionNotValidExplanationAuditWizard"), - confirmText: t("gotIt"), - }); + const res = await verifyAuditWizardSignature(auditwizardSubmission); + if (!res) { + return confirm({ + title: t("submissionNotValid"), + titleIcon: , + description: t("submissionNotValidExplanationAuditWizard"), + confirmText: t("gotIt"), + }); + } } - } - sendVulnerabilityOnChain(calculatedCid); + await sendVulnerabilityOnChain(calculatedCid); + } catch (error) { + console.error("Error in submission:", error); + reset(); + confirm({ + title: t("submissionError"), + titleIcon: , + description: t("submissionErrorExplanation"), + confirmText: t("gotIt"), + }); + } }, [sendVulnerabilityOnChain, submissionData, confirm, requireMessageSignature, userHasCollectedSignature, navigate, vault, t]); const handleClearSubmission = async () => {