/** * Channels resource — WhatsApp Channels / Newsletters. * * Backed by `src/modules/channel/channel.controller.ts` (`@Controller('sessions/:sessionId/channels')`). * @packageDocumentation */ import { encodeSegment } from '../http.js'; import type { OpenWAClient } from '../client.js'; import type { ChannelMessageQuery, ChannelMessageRecord, ChannelRecord, SubscribeChannelRequest, SuccessResult, } from '../types.js'; export class ChannelsResource { constructor(private readonly client: OpenWAClient) {} /** List all channels/newsletters the session is subscribed to. */ list(sessionId: string): Promise { return this.client.request({ method: 'GET', path: `/api/sessions/${encodeSegment(sessionId)}/channels`, }); } /** Get a single channel by id. */ get(sessionId: string, channelId: string): Promise { return this.client.request({ method: 'GET', path: `/api/sessions/${encodeSegment(sessionId)}/channels/${encodeSegment(channelId)}`, }); } /** Get recent messages from a channel. */ messages(sessionId: string, channelId: string, query?: ChannelMessageQuery): Promise { return this.client.request({ method: 'GET', path: `/api/sessions/${encodeSegment(sessionId)}/channels/${encodeSegment(channelId)}/messages`, query, }); } /** Subscribe to a channel using its invite code. Requires an OPERATOR-level key. */ subscribe(sessionId: string, body: SubscribeChannelRequest): Promise { return this.client.request({ method: 'POST', path: `/api/sessions/${encodeSegment(sessionId)}/channels/subscribe`, body, }); } /** Unsubscribe from a channel. Requires an OPERATOR-level key. */ unsubscribe(sessionId: string, channelId: string): Promise { return this.client.request({ method: 'DELETE', path: `/api/sessions/${encodeSegment(sessionId)}/channels/${encodeSegment(channelId)}`, }); } }