import type { IntegrationAccountRequirement, TriggerDefinition, TriggerPresentationContext, } from "../types" const redditAccount = ( scope: "privatemessages" | "read", ): IntegrationAccountRequirement<"reddit"> => ({ connectionOptions: [{ connectionMethodId: "oauth", requiredScopes: [scope] }], serviceId: "reddit", }) const SUBREDDIT_ACCOUNT = redditAccount("read") const subredditTrigger = ( type: TType, name: string, ) => ({ account: SUBREDDIT_ACCOUNT, getPrimary: subredditPrimary, name, type, }) export const redditTriggerDefinitions = { redditSubredditEvent: subredditTrigger( "reddit.subreddit.event", "Reddit subreddit event", ), redditNewPost: subredditTrigger( "reddit.subreddit.post.created", "New Reddit post", ), redditNewComment: subredditTrigger( "reddit.subreddit.comment.created", "New Reddit comment", ), redditNewInboxItem: { account: redditAccount("privatemessages"), name: "New Reddit inbox item", type: "reddit.inbox.item.received", }, redditNewModQueueItem: { account: redditAccount("read"), getPrimary: subredditPrimary, name: "New Reddit mod queue item", type: "reddit.modQueue.item.received", }, } as const satisfies Record /** * Reads a trigger's configured subreddit for presentation. * * @param context - Resolved trigger presentation context. * @throws When canonical trigger configuration is missing its subreddit. */ function subredditPrimary(context: TriggerPresentationContext) { if ( typeof context.config !== "object" || context.config === null || !("subreddit" in context.config) || typeof context.config.subreddit !== "string" ) throw new TypeError("Reddit trigger configuration requires a subreddit.") return { value: `r/${context.config.subreddit}` } }