mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-23 13:38:12 +00:00
45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
/**
|
|
* ClickClack name/id resolution helpers for workspace and channel config.
|
|
*/
|
|
import type { ClickClackClient } from "./http-client.js";
|
|
|
|
/**
|
|
* Resolves a workspace slug/name/id from config to a ClickClack workspace id.
|
|
*/
|
|
export async function resolveWorkspaceId(client: ClickClackClient, workspace: string) {
|
|
if (workspace.startsWith("wsp_")) {
|
|
return workspace;
|
|
}
|
|
const workspaces = await client.workspaces();
|
|
const found = workspaces.find(
|
|
(candidate) =>
|
|
candidate.id === workspace || candidate.slug === workspace || candidate.name === workspace,
|
|
);
|
|
if (!found) {
|
|
throw new Error(`ClickClack workspace not found: ${workspace}`);
|
|
}
|
|
return found.id;
|
|
}
|
|
|
|
/**
|
|
* Resolves a channel name/id from config or target input to a ClickClack
|
|
* channel id.
|
|
*/
|
|
export async function resolveChannelId(
|
|
client: ClickClackClient,
|
|
workspaceId: string,
|
|
channel: string,
|
|
) {
|
|
if (channel.startsWith("chn_")) {
|
|
return channel;
|
|
}
|
|
const channels = await client.channels(workspaceId);
|
|
const found = channels.find(
|
|
(candidate) => candidate.id === channel || candidate.name === channel,
|
|
);
|
|
if (!found) {
|
|
throw new Error(`ClickClack channel not found: ${channel}`);
|
|
}
|
|
return found.id;
|
|
}
|