server/cli/commands/federation/instance/refetch.ts
2024-11-25 21:54:31 +01:00

48 lines
1.3 KiB
TypeScript

import { Args } from "@oclif/core";
import { Instance } from "@versia/kit/db";
import { Instances } from "@versia/kit/tables";
import { eq } from "drizzle-orm";
import ora from "ora";
import { FetchJobType, fetchQueue } from "~/classes/queues/fetch";
import { BaseCommand } from "~/cli/base";
export default class FederationInstanceRefetch extends BaseCommand<
typeof FederationInstanceRefetch
> {
public static override args = {
url: Args.string({
description: "URL of the remote instance",
required: true,
}),
};
public static override description =
"Refetches metadata from remote instances";
public static override examples = ["<%= config.bin %> <%= command.id %>"];
public static override flags = {};
public async run(): Promise<void> {
const { args } = await this.parse(FederationInstanceRefetch);
const spinner = ora("Refetching instance metadata").start();
const host = new URL(args.url).host;
const instance = await Instance.fromSql(eq(Instances.baseUrl, host));
if (!instance) {
throw new Error("Instance not found");
}
await fetchQueue.add(FetchJobType.Instance, {
uri: args.url,
});
spinner.succeed("Task added to queue");
this.exit(0);
}
}