Skip to main content
Glama
schemas.ts14.6 kB
import { z } from "zod"; const toTuple = <T extends string>(xs: readonly T[]) => xs as unknown as [T, ...T[]]; /** * Factory function to create language-feature schemas from a mapping */ function createLanguageFeatureSchemas<TMapping extends Record<string, readonly string[]>>( mapping: TMapping ) { type Language = Extract<keyof TMapping, string>; type Feature = TMapping[keyof TMapping][number]; const languageSchema = z.enum( toTuple(Object.keys(mapping) as unknown as readonly [Language, ...Language[]]) ); const allFeatures = Array.from(new Set(Object.values(mapping).flat())) as readonly Feature[]; const featureSchema = z.enum(toTuple(allFeatures)); const baseSchema = z.object({ language: languageSchema, feature: featureSchema, }); const refinedSchema = baseSchema.superRefine((val, ctx) => { const language = val.language as string; const feature = val.feature as string; const allowed = mapping[language] as readonly string[]; if (allowed && !allowed.includes(feature)) { ctx.addIssue({ code: z.ZodIssueCode.custom, path: ["feature"], message: `Feature "${feature}" is not available for language "${language}". Allowed: ${allowed.join(", ")}`, }); } }); return { languageSchema, featureSchema, baseSchema, refinedSchema, mapping, } as const; } export const sdkLanguageToFeatures = { asyncio: [ "access-manager", "access-manager-v2", "channel-groups", "configuration", "files", "message-actions", "misc", "mobile-push", "presence", "publish-and-subscribe", "storage-and-playback", ], "c-core": [ "access-manager", "channel-groups", "configuration", "encryption", "misc", "presence", "publish-and-subscribe", "storage-and-playback", ], "c-sharp": [ "access-manager", "access-manager-v2", "channel-groups", "configuration", "encryption", "files", "message-actions", "misc", "mobile-push", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], dart: [ "access-manager", "access-manager-v2", "channel-groups", "configuration", "encryption", "files", "message-actions", "misc", "mobile-push", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], freertos: [ "channel-groups", "configuration", "misc", "presence", "publish-and-subscribe", "storage-and-playback", ], go: [ "access-manager", "access-manager-v2", "channel-groups", "configuration", "encryption", "files", "message-actions", "misc", "mobile-push", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], java: [ "access-manager", "access-manager-v2", "channel-groups", "configuration", "encryption", "files", "message-actions", "misc", "mobile-push", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], javascript: [ "access-manager", "access-manager-v2", "channel-groups", "configuration", "encryption", "files", "message-actions", "misc", "mobile-push", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], kotlin: [ "_memberships", "_spaces", "_users", "access-manager", "access-manager-v2", "channel-groups", "configuration", "encryption", "files", "message-actions", "misc", "mobile-push", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], mbed: [ "channel-groups", "configuration", "misc", "presence", "publish-and-subscribe", "storage-and-playback", ], "objective-c": [ "access-manager", "channel-groups", "configuration", "encryption", "files", "message-actions", "misc", "mobile-push", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], php: [ "access-manager", "access-manager-v2", "channel-groups", "configuration", "encryption", "files", "message-actions", "mobile-push", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], "posix-c": [ "access-manager", "channel-groups", "configuration", "misc", "presence", "publish-and-subscribe", "storage-and-playback", ], "posix-cpp": [ "access-manager", "channel-groups", "configuration", "misc", "presence", "publish-and-subscribe", "storage-and-playback", ], python: [ "_memberships", "_spaces", "_users", "access-manager", "access-manager-v2", "channel-groups", "configuration", "encryption", "files", "message-actions", "misc", "mobile-push", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], ruby: [ "access-manager", "access-manager-v2", "channel-groups", "configuration", "encryption", "message-actions", "misc", "mobile-push", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], rust: [ "access-manager", "configuration", "encryption", "misc", "presence", "publish-and-subscribe", ], swift: [ "access-manager", "channel-groups", "configuration", "encryption", "files", "message-actions", "misc", "mobile-push", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], unity: [ "access-manager", "channel-groups", "configuration", "encryption", "files", "message-actions", "misc", "mobile-push", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], unreal: [ "access-manager", "channel-groups", "configuration", "encryption", "message-actions", "objects", "presence", "publish-and-subscribe", "storage-and-playback", ], "windows-c": [ "access-manager", "channel-groups", "configuration", "misc", "presence", "publish-and-subscribe", "storage-and-playback", ], "windows-cpp": [ "access-manager", "channel-groups", "configuration", "misc", "presence", "publish-and-subscribe", "storage-and-playback", ], } as const; export const chatSdkLanguageToFeatures = { javascript: [ "channels-create", "channels-delete", "channels-details", "channels-invite", "channels-join", "channels-leave", "channels-list", "channels-membership", "channels-references", "channels-typing-indicator", "channels-updates", "channels-watch", "connection-management", "custom-events", "error-logging", "messages-delete", "messages-details", "messages-drafts", "messages-drafts_v1", "messages-files", "messages-forward", "messages-history", "messages-links", "messages-moderation", "messages-pinned", "messages-quotes", "messages-reactions", "messages-read-receipts", "messages-restore", "messages-send-receive", "messages-threads", "messages-unread", "messages-updates", "moderation", "push-notifications", "users-create", "users-delete", "users-details", "users-list", "users-mentions", "users-moderation", "users-moderation-user", "users-permissions", "users-presence", "users-updates", "utility-methods", ], kotlin: [ "channels-create", "channels-delete", "channels-details", "channels-invite", "channels-join", "channels-leave", "channels-list", "channels-membership", "channels-references", "channels-typing-indicator", "channels-updates", "channels-watch", "connection-management", "custom-events", "error-logging", "messages-delete", "messages-details", "messages-drafts", "messages-files", "messages-forward", "messages-history", "messages-links", "messages-moderation", "messages-pinned", "messages-quotes", "messages-reactions", "messages-read-receipts", "messages-restore", "messages-send-receive", "messages-threads", "messages-unread", "messages-updates", "moderation", "push-notifications", "users-create", "users-delete", "users-details", "users-list", "users-mentions", "users-moderation", "users-moderation-user", "users-permissions", "users-presence", "users-updates", "utility-methods", ], swift: [ "channels-create", "channels-delete", "channels-details", "channels-invite", "channels-join", "channels-leave", "channels-list", "channels-membership", "channels-references", "channels-typing-indicator", "channels-updates", "channels-watch", "custom-events", "error-logging", "messages-delete", "messages-details", "messages-drafts", "messages-files", "messages-forward", "messages-history", "messages-links", "messages-moderation", "messages-pinned", "messages-quotes", "messages-reactions", "messages-read-receipts", "messages-restore", "messages-send-receive", "messages-threads", "messages-unread", "messages-updates", "push-notifications", "users-create", "users-delete", "users-details", "users-list", "users-mentions", "users-presence", "users-updates", ], unity: [ "channels-create", "channels-delete", "channels-details", "channels-invite", "channels-join", "channels-leave", "channels-list", "channels-membership", "channels-references", "channels-typing-indicator", "channels-updates", "channels-watch", "custom-events", "error-logging", "messages-delete", "messages-details", "messages-drafts", "messages-forward", "messages-history", "messages-links", "messages-moderation", "messages-pinned", "messages-quotes", "messages-reactions", "messages-read-receipts", "messages-restore", "messages-send-receive", "messages-threads", "messages-unread", "messages-updates", "moderation", "users-create", "users-delete", "users-details", "users-list", "users-mentions", "users-moderation", "users-permissions", "users-presence", "users-updates", ], unreal: [ "channels-create", "channels-delete", "channels-details", "channels-invite", "channels-join", "channels-leave", "channels-list", "channels-membership", "channels-references", "channels-typing-indicator", "channels-updates", "channels-watch", "connection-management", "custom-events", "error-logging", "messages-delete", "messages-details", "messages-drafts", "messages-forward", "messages-history", "messages-links", "messages-moderation", "messages-pinned", "messages-quotes", "messages-reactions", "messages-read-receipts", "messages-restore", "messages-send-receive", "messages-threads", "messages-unread", "messages-updates", "moderation", "users-create", "users-delete", "users-details", "users-list", "users-mentions", "users-moderation", "users-permissions", "users-presence", "users-updates", ], }; const chatSdkSchemas = createLanguageFeatureSchemas(chatSdkLanguageToFeatures); export const GetChatSdkDocumentationSchema = chatSdkSchemas.baseSchema; export const GetChatSdkDocumentationSchemaRefined = chatSdkSchemas.refinedSchema; const sdkSchemas = createLanguageFeatureSchemas(sdkLanguageToFeatures); export const GetSdkDocumentationSchema = sdkSchemas.baseSchema; export const GetSdkDocumentationSchemaRefined = sdkSchemas.refinedSchema; export const howToSlugs = [ "7-chat-sdk-features-developers-will-love", "add-friend-list-to-your-unity-game", "add-language-translation-and-abusive-language-filtering-to-your-unreal-engine-game", "add-moderation-and-translation-to-your-unity-game", "add-moderation-to-your-live-events-app", "add-presence-to-your-unity-game", "add-presence-to-your-unreal-engine-game", "add-pubnub-to-your-unity-game", "add-real-time-chat-to-your-unity-game", "add-real-time-chat-to-your-unreal-engine-game", "add-scoreboard-and-leaderboard-to-your-unity-game", "admin-portal-create-keys", "admin-portal-enabling-files", "admin-portal-enabling-objects", "admin-portal-persistence", "admin-portal-presence", "admin-portal-push-notifications-android", "admin-portal-push-notifications-apns", "build-chat-app-using-html-css-vue-js", "build-chat-for-virtual-events", "build-collaborative-applications", "call-access-manager-from-pubnub-functions", "call-pubnub-from-alexa", "chat-sdk-add-reactions-to-messages", "chat-sdk-create-threads-and-quote-messges", "chat-sdk-manage-user-channel-membership", "chat-sdk-mention-users", "create-a-real-time-delivery-application", "create-game-alerts", "cross-platform-chat-application", "develop-an-iot-solution", "develop-game-scoring-system", "eanda-advanced-jsonpath-filter", "explore-real-time-geolocation-solutions", "implement-iot-predictive-maintenance", "interactive-2d-chat", "interactive-rpgs", "make-the-most-of-pubnubs-dashboards", "make-your-own-leaderboard", "manage-users-and-channels-with-bizops-workspace", "message-timestamps", "monitor-and-moderate-conversations-with-bizops-workspace", "push-notifications", "real-time-streaming-application", "real-time-user-counter", "securely-moderate-chat-and-users", "set-up-events-and-actions", "set-up-illuminate-gaming", "signing-and-verifying-onrequest-function-requests", "skill-based-matchmaking-with-pubnub", "smooth-driver-location", "stream-events-from-pubnub-to-rabbitmq", "summarize-missed-chat-messages-with-chatgpt", "telemedicine-app-development", "test-cases-for-chat-application", "throttle-or-aggregate-messages", "understand-your-pubnub-data-better-using-analyze-with-ai", "upgrade-encryption-to-256-bit-key-length", "use-app-context", "use-the-ena-api", ] as const; export const HowToSchema = z.object({ slug: z.enum(toTuple(howToSlugs)), }); export const GetBestPracticesSchema = z.object({});

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pubnub/pubnub-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server