* refactor: apply biome formatting to apps/web (batch 1) Formats apps/web non-modules directories: - apps/web/app - apps/web/lib - apps/web/pages - apps/web/styles - apps/web/server - apps/web/test - Root-level .ts and .mjs files Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor: apply biome formatting to apps/web/modules (batch 2) Formats smaller apps/web/modules directories: - onboarding, data-table, users, apps, auth - integration-attribute-sync, shell, availability - feature-flags, team, webhooks, getting-started - feature-opt-in, troubleshooter, schedules, notifications - signup-view.tsx Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor: apply biome formatting to apps/web/modules (batch 3) Formats medium apps/web/modules directories: - bookings - event-types - insights - embed Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor: apply biome formatting to apps/web/modules/ee (batch 4) Formats apps/web/modules/ee directory. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor: apply biome formatting to apps/web (batch 5) Formats remaining apps/web directories: - apps/web/modules/settings - apps/web/modules/booking-audit - apps/web/playwright Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor: apply biome formatting to apps/web/components (batch 6) Formats remaining apps/web/components files. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor: apply biome formatting to new apps/web files from main Formats newly added/modified files from main merge: - WorkflowStepContainer.tsx (resolved merge conflicts) - Newly moved files (blocklist, form-builder, schedules, etc.) - Other files modified in main Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor: apply biome formatting to new apps/web files from main Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { wrapGetServerSidePropsWithSentry } from "@sentry/nextjs";
|
|
import { isbot } from "isbot";
|
|
import type { GetServerSidePropsContext } from "next";
|
|
|
|
import { getRoutedUrl, hasEmbedPath } from "@calcom/features/routing-forms/lib/getRoutedUrl";
|
|
import logger from "@calcom/lib/logger";
|
|
|
|
import { TRPCError } from "@trpc/server";
|
|
|
|
const log = logger.getSubLogger({ prefix: ["router/getServerSideProps"] });
|
|
|
|
// Show a positive message to the bots so that they don't think that the form is broken.
|
|
const BOT_MESSAGE = "Thank you for your interest! We will be in touch soon.";
|
|
|
|
export const getServerSideProps = wrapGetServerSidePropsWithSentry(async function getServerSideProps(
|
|
context: GetServerSidePropsContext
|
|
) {
|
|
try {
|
|
// Check if the request is from a bot
|
|
const userAgent = context.req.headers["user-agent"];
|
|
if (userAgent && isbot(userAgent)) {
|
|
log.info(`[BOT] Ignoring request from user agent: ${userAgent}`);
|
|
return {
|
|
props: {
|
|
isEmbed: hasEmbedPath(context.req.url || ""),
|
|
form: null,
|
|
message: BOT_MESSAGE,
|
|
errorMessage: null,
|
|
},
|
|
};
|
|
}
|
|
|
|
return await getRoutedUrl(context);
|
|
} catch (error) {
|
|
if (error instanceof TRPCError && error.code === "TOO_MANY_REQUESTS") {
|
|
context.res.statusCode = 429;
|
|
const isEmbed = hasEmbedPath(context.req.url || "");
|
|
|
|
return {
|
|
props: {
|
|
isEmbed,
|
|
form: null,
|
|
message: null,
|
|
errorMessage: error.message,
|
|
},
|
|
};
|
|
}
|
|
throw error;
|
|
}
|
|
}, "/router");
|