import { env } from "$env/dynamic/private"; import { collections } from "$lib/server/database.js"; import { toolFromConfigs } from "$lib/server/tools/index.js"; import type { BaseTool, CommunityToolDB } from "$lib/types/Tool.js"; import { generateQueryTokens, generateSearchTokens } from "$lib/utils/searchTokens.js"; import type { Filter } from "mongodb"; import { ReviewStatus } from "$lib/types/Review"; export async function GET({ url }) { if (env.COMMUNITY_TOOLS !== "true") { return new Response("Community tools are not enabled", { status: 403 }); } const query = url.searchParams.get("q")?.trim() ?? null; const queryTokens = !!query && generateQueryTokens(query); const filter: Filter = { ...(queryTokens && { searchTokens: { $all: queryTokens } }), review: ReviewStatus.APPROVED, }; const matchingCommunityTools = await collections.tools .find(filter) .project>({ _id: 1, displayName: 1, color: 1, icon: 1, createdByName: 1, }) .sort({ useCount: -1 }) .limit(5) .toArray(); const matchingConfigTools = toolFromConfigs .filter((tool) => !tool?.isHidden) .filter((tool) => tool.name !== "websearch") // filter out websearch tool from config tools since its added separately .filter((tool) => { if (queryTokens) { return generateSearchTokens(tool.displayName).some((token) => queryTokens.some((queryToken) => queryToken.test(token)) ); } return true; }) .map((tool) => ({ _id: tool._id, displayName: tool.displayName, color: tool.color, icon: tool.icon, createdByName: undefined, })); const tools = [...matchingConfigTools, ...matchingCommunityTools] satisfies Array< Pick & { createdByName?: string } >; return Response.json(tools.map((tool) => ({ ...tool, _id: tool._id.toString() })).slice(0, 5)); }