From 9fba9ca7d2a72e8a4afbc71468841192f7a5adfc Mon Sep 17 00:00:00 2001 From: Jacob Schlecht Date: Tue, 25 Aug 2026 22:09:18 -0600 Subject: [PATCH] feat: Add discovery endpoints for bots and servers Signed-off-by: Jacob Schlecht --- src/classes/Bot.ts | 29 ++++++++++++++++++++++++++++- src/classes/Server.ts | 30 ++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/classes/Bot.ts b/src/classes/Bot.ts index f68a0a70..7256b8a1 100644 --- a/src/classes/Bot.ts +++ b/src/classes/Bot.ts @@ -1,4 +1,4 @@ -import type { DataEditBot } from "stoat-api"; +import type { DataEditBot, DiscoverRequest } from "stoat-api"; import { decodeTime } from "ulid"; import type { BotCollection } from "../collections/BotCollection.js"; @@ -158,4 +158,31 @@ export class Bot { await this.#collection.client.api.delete(`/bots/${this.id as ""}`); this.#collection.delete(this.id); } + + /** + * Add bot to the discover request queue + */ + async requestDiscover(): Promise { + await this.#collection.client.api.put(`/bots/${this.id as ""}/discover`); + } + + /** + * Get the status of the discover request for this bot + * @returns The discovery request for this bot if one exists + */ + async discoverRequestStatus(): Promise { + return await this.#collection.client.api.get( + `/bots/${this.id as ""}/discover`, + ); + } + + /** + * Cancel the discover request for this bot + * + * This cannot be used to remove bots from discover that have already been accepted + * and should only be called on bots that have an outstanding discover request. + */ + async cancelDiscoverRequest() { + await this.#collection.client.api.delete(`/bots/${this.id as ""}/discover`); + } } diff --git a/src/classes/Server.ts b/src/classes/Server.ts index 4ff841ca..f732291a 100644 --- a/src/classes/Server.ts +++ b/src/classes/Server.ts @@ -14,6 +14,7 @@ import type { DataCreateServerChannel, DataEditRole, DataEditServer, + DiscoverRequest, Override, Role, } from "stoat-api"; @@ -852,4 +853,33 @@ export class Server { return highest; } + + /** + * Add server to the discover request queue + */ + async requestDiscover(): Promise { + await this.#collection.client.api.put(`/servers/${this.id as ""}/discover`); + } + + /** + * Get the status of the discover request for this server + * @returns The discovery request for this server if one exists + */ + async discoverRequestStatus(): Promise { + return await this.#collection.client.api.get( + `/servers/${this.id as ""}/discover`, + ); + } + + /** + * Cancel the discover request for this server + * + * This cannot be used to remove servers from discover that have already been accepted + * and should only be called on servers that have an outstanding discover request. + */ + async cancelDiscoverRequest() { + await this.#collection.client.api.delete( + `/servers/${this.id as ""}/discover`, + ); + } }