70 lines
2.3 KiB
TypeScript
70 lines
2.3 KiB
TypeScript
import type { ClawdbotPluginApi, ClawdbotConfig } from "clawdbot/plugin-sdk";
|
|
import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk";
|
|
|
|
import { nostrPlugin } from "./src/channel.js";
|
|
import { setNostrRuntime, getNostrRuntime } from "./src/runtime.js";
|
|
import { createNostrProfileHttpHandler } from "./src/nostr-profile-http.js";
|
|
import { resolveNostrAccount } from "./src/types.js";
|
|
import type { NostrProfile } from "./src/config-schema.js";
|
|
|
|
const plugin = {
|
|
id: "nostr",
|
|
name: "Nostr",
|
|
description: "Nostr DM channel plugin via NIP-04",
|
|
configSchema: emptyPluginConfigSchema(),
|
|
register(api: ClawdbotPluginApi) {
|
|
setNostrRuntime(api.runtime);
|
|
api.registerChannel({ plugin: nostrPlugin });
|
|
|
|
// Register HTTP handler for profile management
|
|
const httpHandler = createNostrProfileHttpHandler({
|
|
getConfigProfile: (accountId: string) => {
|
|
const runtime = getNostrRuntime();
|
|
const cfg = runtime.config.loadConfig() as ClawdbotConfig;
|
|
const account = resolveNostrAccount({ cfg, accountId });
|
|
return account.profile;
|
|
},
|
|
updateConfigProfile: async (accountId: string, profile: NostrProfile) => {
|
|
const runtime = getNostrRuntime();
|
|
const cfg = runtime.config.loadConfig() as ClawdbotConfig;
|
|
|
|
// Build the config patch for channels.nostr.profile
|
|
const channels = (cfg.channels ?? {}) as Record<string, unknown>;
|
|
const nostrConfig = (channels.nostr ?? {}) as Record<string, unknown>;
|
|
|
|
const updatedNostrConfig = {
|
|
...nostrConfig,
|
|
profile,
|
|
};
|
|
|
|
const updatedChannels = {
|
|
...channels,
|
|
nostr: updatedNostrConfig,
|
|
};
|
|
|
|
await runtime.config.writeConfigFile({
|
|
...cfg,
|
|
channels: updatedChannels,
|
|
});
|
|
},
|
|
getAccountInfo: (accountId: string) => {
|
|
const runtime = getNostrRuntime();
|
|
const cfg = runtime.config.loadConfig() as ClawdbotConfig;
|
|
const account = resolveNostrAccount({ cfg, accountId });
|
|
if (!account.configured || !account.publicKey) {
|
|
return null;
|
|
}
|
|
return {
|
|
pubkey: account.publicKey,
|
|
relays: account.relays,
|
|
};
|
|
},
|
|
log: api.logger,
|
|
});
|
|
|
|
api.registerHttpHandler(httpHandler);
|
|
},
|
|
};
|
|
|
|
export default plugin;
|