import { z } from "zod";
import { githubRequest, buildUrl } from "../common/utils.js";
export const SearchOptions = z.object({
q: z.string(),
order: z.enum(["asc", "desc"]).optional(),
page: z.number().min(1).optional(),
per_page: z.number().min(1).max(100).optional(),
});
export const SearchUsersOptions = SearchOptions.extend({
sort: z.enum(["followers", "repositories", "joined"]).optional(),
});
export const SearchIssuesOptions = SearchOptions.extend({
sort: z.enum([
"comments",
"reactions",
"reactions-+1",
"reactions--1",
"reactions-smile",
"reactions-thinking_face",
"reactions-heart",
"reactions-tada",
"interactions",
"created",
"updated",
]).optional(),
});
export const SearchCodeSchema = SearchOptions;
export const _SearchCodeSchema = SearchCodeSchema.extend({
github_pat: z.string().describe("GitHub Personal Access Token"),
});
export const SearchUsersSchema = SearchUsersOptions;
export const _SearchUsersSchema = SearchUsersSchema.extend({
github_pat: z.string().describe("GitHub Personal Access Token"),
});
export const SearchIssuesSchema = SearchIssuesOptions;
export const _SearchIssuesSchema = SearchIssuesSchema.extend({
github_pat: z.string().describe("GitHub Personal Access Token"),
});
export async function searchCode(github_pat: string, params: z.infer<typeof SearchCodeSchema>) {
return githubRequest(github_pat, buildUrl("https://api.github.com/search/code", params));
}
export async function searchIssues(github_pat: string, params: z.infer<typeof SearchIssuesSchema>) {
return githubRequest(github_pat, buildUrl("https://api.github.com/search/issues", params));
}
export async function searchUsers(github_pat: string, params: z.infer<typeof SearchUsersSchema>) {
return githubRequest(github_pat, buildUrl("https://api.github.com/search/users", params));
}