feat: split OpenAPI schema into Mail + Social for ChatGPT
- Hermes Mail: 9 ops (Obsidian + Email) - Hermes Social: 25 ops (LinkedIn, TikTok, Instagram, FB, Twitter, Telegram, WhatsApp, Discord) - Full schema still available at /openapi.json
This commit is contained in:
@@ -720,6 +720,80 @@ export function getOpenApiSpec(serverUrl: string) {
|
||||
};
|
||||
}
|
||||
|
||||
const MAIL_PATHS = new Set([
|
||||
'/api/obsidian/search',
|
||||
'/api/obsidian/note',
|
||||
'/api/obsidian/note/append',
|
||||
'/api/obsidian/sync',
|
||||
'/api/email/profile',
|
||||
'/api/email/search',
|
||||
'/api/email/read',
|
||||
'/api/email/send',
|
||||
]);
|
||||
|
||||
const SOCIAL_PATHS = new Set([
|
||||
'/api/whatsapp/send',
|
||||
'/api/linkedin/profile',
|
||||
'/api/linkedin/post',
|
||||
'/api/linkedin/video',
|
||||
'/api/telegram/message',
|
||||
'/api/telegram/updates',
|
||||
'/api/discord/guilds',
|
||||
'/api/discord/message',
|
||||
'/api/discord/messages',
|
||||
'/api/instagram/profile',
|
||||
'/api/instagram/media',
|
||||
'/api/instagram/post',
|
||||
'/api/instagram/reel',
|
||||
'/api/facebook/page',
|
||||
'/api/facebook/posts',
|
||||
'/api/facebook/post',
|
||||
'/api/facebook/photo',
|
||||
'/api/facebook/video',
|
||||
'/api/twitter/search',
|
||||
'/api/twitter/user',
|
||||
'/api/twitter/tweets',
|
||||
'/api/twitter/video',
|
||||
'/api/tiktok/profile',
|
||||
'/api/tiktok/videos',
|
||||
'/api/tiktok/video',
|
||||
]);
|
||||
|
||||
function filterPaths(fullSpec: Record<string, unknown>, allowed: Set<string>): Record<string, unknown> {
|
||||
const paths = fullSpec.paths as Record<string, unknown>;
|
||||
const filtered: Record<string, unknown> = {};
|
||||
for (const [key, value] of Object.entries(paths)) {
|
||||
if (allowed.has(key)) filtered[key] = value;
|
||||
}
|
||||
return filtered;
|
||||
}
|
||||
|
||||
export function getOpenApiSpecMail(serverUrl: string) {
|
||||
const full = getOpenApiSpec(serverUrl);
|
||||
return {
|
||||
...full,
|
||||
info: {
|
||||
...full.info,
|
||||
title: 'Hermes Mail',
|
||||
description: 'Email operations across multiple accounts and Obsidian vault access (search, read, append, update notes).',
|
||||
},
|
||||
paths: filterPaths(full, MAIL_PATHS),
|
||||
};
|
||||
}
|
||||
|
||||
export function getOpenApiSpecSocial(serverUrl: string) {
|
||||
const full = getOpenApiSpec(serverUrl);
|
||||
return {
|
||||
...full,
|
||||
info: {
|
||||
...full.info,
|
||||
title: 'Hermes Social',
|
||||
description: 'Social media publishing and analytics: LinkedIn, TikTok, Instagram, Facebook, Twitter/X, Telegram, WhatsApp, Discord.',
|
||||
},
|
||||
paths: filterPaths(full, SOCIAL_PATHS),
|
||||
};
|
||||
}
|
||||
|
||||
const ACCOUNT_PARAM_SCHEMA = {
|
||||
account: {
|
||||
type: 'string',
|
||||
|
||||
Reference in New Issue
Block a user