sourcebot/packages/web/src/features/workerApi/actions.ts

59 lines
1.8 KiB
TypeScript

'use server';
import { sew } from "@/actions";
import { unexpectedError } from "@/lib/serviceError";
import { withAuthV2, withMinimumOrgRole } from "@/withAuthV2";
import { OrgRole } from "@sourcebot/db";
import z from "zod";
const WORKER_API_URL = 'http://localhost:3060';
export const syncConnection = async (connectionId: number) => sew(() =>
withAuthV2(({ role }) =>
withMinimumOrgRole(role, OrgRole.OWNER, async () => {
const response = await fetch(`${WORKER_API_URL}/api/sync-connection`, {
method: 'POST',
body: JSON.stringify({
connectionId
}),
headers: {
'Content-Type': 'application/json',
},
});
if (!response.ok) {
return unexpectedError('Failed to sync connection');
}
const data = await response.json();
const schema = z.object({
jobId: z.string(),
});
return schema.parse(data);
})
)
);
export const indexRepo = async (repoId: number) => sew(() =>
withAuthV2(({ role }) =>
withMinimumOrgRole(role, OrgRole.OWNER, async () => {
const response = await fetch(`${WORKER_API_URL}/api/index-repo`, {
method: 'POST',
body: JSON.stringify({ repoId }),
headers: {
'Content-Type': 'application/json',
},
});
if (!response.ok) {
return unexpectedError('Failed to index repo');
}
const data = await response.json();
const schema = z.object({
jobId: z.string(),
});
return schema.parse(data);
})
)
);