import type { OpenClawConfig } from "../../config/types.openclaw.js"; import type { RuntimeEnv } from "../../runtime.js"; import { normalizeLowercaseStringOrEmpty } from "../../shared/string-coerce.js"; import type { ChannelId } from "./channel-id.types.js"; import type { ChannelPairingAdapter } from "./pairing.types.js"; import { getChannelPlugin, listChannelPlugins, normalizeChannelId } from "./registry.js";
export function listPairingChannels(): ChannelId[] { // Channel docking: pairing support is declared via plugin.pairing. return listChannelPlugins()
.filter((plugin) => plugin.pairing)
.map((plugin) => plugin.id);
}
export function requirePairingAdapter(channelId: ChannelId): ChannelPairingAdapter { const adapter = getPairingAdapter(channelId); if (!adapter) { thrownew Error(`Channel ${channelId} does not support pairing`);
} return adapter;
}
export function resolvePairingChannel(raw: unknown): ChannelId { const value = typeof raw === "string"
? raw
: typeof raw === "number" || typeof raw === "boolean"
? String(raw)
: ""; const normalizedValue = normalizeLowercaseStringOrEmpty(value); const normalized = normalizeChannelId(normalizedValue); const channels = listPairingChannels(); if (!normalized || !channels.includes(normalized)) { thrownew Error(
`Invalid channel: ${normalizedValue || "(empty)"} (expected one of: ${channels.join(", ")})`,
);
} return normalized;
}
export async function notifyPairingApproved(params: {
channelId: ChannelId;
id: string;
cfg: OpenClawConfig;
runtime?: RuntimeEnv; /** Extension channels can pass their adapter directly to bypass registry lookup. */
pairingAdapter?: ChannelPairingAdapter;
}): Promise<void> { // Extensions may provide adapter directly to bypass ESM module isolation const adapter = params.pairingAdapter ?? requirePairingAdapter(params.channelId); if (!adapter.notifyApproval) { return;
}
await adapter.notifyApproval({
cfg: params.cfg,
id: params.id,
runtime: params.runtime,
});
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-04)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.