refactor(federation): ♻️ Make Instance updateFromRemote non-static

This commit is contained in:
Jesse Wierzbinski 2024-11-24 22:48:34 +01:00
parent 8b23eb888d
commit 34370a082a
No known key found for this signature in database
2 changed files with 18 additions and 13 deletions

View file

@ -362,26 +362,21 @@ export class Instance extends BaseInterface<typeof Instances> {
}); });
} }
public static async updateFromRemote(url: string): Promise<Instance> { public async updateFromRemote(): Promise<Instance> {
const logger = getLogger("federation"); const logger = getLogger("federation");
const host = new URL(url).host;
const instance = await Instance.fromSql(eq(Instances.baseUrl, host)); const output = await Instance.fetchMetadata(
`https://${this.data.baseUrl}`,
if (!instance) { );
throw new Error("Instance not found");
}
const output = await Instance.fetchMetadata(url);
if (!output) { if (!output) {
logger.error`Failed to update instance ${chalk.bold(host)}`; logger.error`Failed to update instance ${chalk.bold(this.data.baseUrl)}`;
throw new Error("Failed to update instance"); throw new Error("Failed to update instance");
} }
const { metadata, protocol } = output; const { metadata, protocol } = output;
await instance.update({ await this.update({
name: metadata.name, name: metadata.name,
version: metadata.software.version, version: metadata.software.version,
logo: metadata.logo, logo: metadata.logo,
@ -389,7 +384,7 @@ export class Instance extends BaseInterface<typeof Instances> {
publicKey: metadata.public_key, publicKey: metadata.public_key,
}); });
return instance; return this;
} }
public static getCount(): Promise<number> { public static getCount(): Promise<number> {

View file

@ -1,5 +1,7 @@
import { Args } from "@oclif/core"; import { Args } from "@oclif/core";
import { Instance } from "@versia/kit/db"; import { Instance } from "@versia/kit/db";
import { Instances } from "@versia/kit/tables";
import { eq } from "drizzle-orm";
import ora from "ora"; import ora from "ora";
import { BaseCommand } from "~/cli/base"; import { BaseCommand } from "~/cli/base";
import { formatArray } from "~/cli/utils/format"; import { formatArray } from "~/cli/utils/format";
@ -26,7 +28,15 @@ export default class FederationInstanceRefetch extends BaseCommand<
const spinner = ora("Refetching instance metadata").start(); const spinner = ora("Refetching instance metadata").start();
const data = await Instance.updateFromRemote(args.url); const host = new URL(args.url).host;
const instance = await Instance.fromSql(eq(Instances.baseUrl, host));
if (!instance) {
throw new Error("Instance not found");
}
const data = await instance.updateFromRemote();
if (!data) { if (!data) {
spinner.fail("Failed to refetch instance metadata"); spinner.fail("Failed to refetch instance metadata");