feat: selectable pairing-notify provider (discord optional, add fabric)
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>
This commit is contained in:
30
plugin/notifications/factory.ts
Normal file
30
plugin/notifications/factory.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
/**
|
||||
* 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 ?? ""
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user