import { createServerFn } from "@tanstack/react-start"; import { BacklinksService } from "@/server/features/backlinks/services/BacklinksService"; import { requireProjectContext } from "@/serverFunctions/middleware"; import { backlinksOverviewInputSchema, backlinksRowsPageRequestSchema, referringDomainsPageRequestSchema, topPagesPageRequestSchema, } from "@/types/schemas/backlinks"; // The web UI exposes spam score as a regular user filter, so the implicit // DataForSEO spam-score cutoff stays off for all web requests. const WEB_SPAM_OPTIONS = { hideSpam: false }; export const getBacklinksOverview = createServerFn({ method: "POST", }) .middleware(requireProjectContext) .inputValidator((data: unknown) => backlinksOverviewInputSchema.parse(data)) .handler(async ({ data, context }) => { const profile = await BacklinksService.profileOverview( { target: data.target, scope: data.scope, }, context, ); return profile.overview; }); export const getBacklinksRows = createServerFn({ method: "POST", }) .middleware(requireProjectContext) .inputValidator((data: unknown) => backlinksRowsPageRequestSchema.parse(data)) .handler(({ data, context }) => BacklinksService.profileBacklinksPage(data, context, WEB_SPAM_OPTIONS), ); export const getBacklinksReferringDomains = createServerFn({ method: "POST", }) .middleware(requireProjectContext) .inputValidator((data: unknown) => referringDomainsPageRequestSchema.parse(data), ) .handler(({ data, context }) => BacklinksService.profileReferringDomainsPage( data, context, WEB_SPAM_OPTIONS, ), ); export const getBacklinksTopPages = createServerFn({ method: "POST", }) .middleware(requireProjectContext) .inputValidator((data: unknown) => topPagesPageRequestSchema.parse(data)) .handler(({ data, context }) => BacklinksService.profileTopPagesPage(data, context), );