Pairing-code delivery was hardwired to Discord DM (notifyBotToken +
adminUserId required). Make the provider config-selectable.
- core/config.ts: add notifyProvider ("discord"|"fabric", default
"discord" for back-compat); discord fields required only for discord;
add fabric block (centerApiBase/apiKey/guildNodeId/channelId) required
only for fabric
- notifications/types.ts: neutral PairingNotificationService interface
(DiscordNotificationService kept as back-compat alias)
- notifications/fabric.ts: post the pairing message to a Fabric channel
(agent/login -> guild token -> POST messages); self-contained, no
Fabric plugin dependency
- notifications/factory.ts: select provider from config
- core/runtime.ts: wire via factory
- openclaw.plugin.json: notifyProvider enum + fabric object; drop
notifyBotToken/adminUserId from required (conditional in code)
- tests: fabric notifier + provider-selection config (80 passing)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
31 lines
968 B
TypeScript
31 lines
968 B
TypeScript
/**
|
|
* Yonexus Server - Pairing notification provider factory.
|
|
*
|
|
* Selects the notification provider from config (`notifyProvider`).
|
|
* Discord is the default for backward compatibility.
|
|
*/
|
|
|
|
import type { YonexusServerConfig } from "../core/config.js";
|
|
import type { PairingNotificationService } from "./types.js";
|
|
import { createDiscordNotificationService } from "./discord.js";
|
|
import { createFabricNotificationService } from "./fabric.js";
|
|
|
|
export function createNotificationService(
|
|
config: YonexusServerConfig
|
|
): PairingNotificationService {
|
|
if (config.notifyProvider === "fabric") {
|
|
if (!config.fabric) {
|
|
throw new Error(
|
|
'Yonexus.Server: notifyProvider is "fabric" but fabric config is missing'
|
|
);
|
|
}
|
|
return createFabricNotificationService(config.fabric);
|
|
}
|
|
|
|
// Default / "discord"
|
|
return createDiscordNotificationService({
|
|
botToken: config.notifyBotToken ?? "",
|
|
adminUserId: config.adminUserId ?? ""
|
|
});
|
|
}
|