http = $http; } /** @return array> */ public function list(string $sessionId): array { return $this->http->request('GET', "/api/sessions/{$this->http->encodeSegment($sessionId)}/channels") ?? []; } /** @return array */ public function get(string $sessionId, string $channelId): array { return $this->http->request('GET', "/api/sessions/{$this->http->encodeSegment($sessionId)}/channels/{$this->http->encodeSegment($channelId)}"); } /** * Get recent messages from a channel. * * @param array $query e.g. ['limit' => 50]. * @return array> */ public function messages(string $sessionId, string $channelId, array $query = []): array { return $this->http->request('GET', "/api/sessions/{$this->http->encodeSegment($sessionId)}/channels/{$this->http->encodeSegment($channelId)}/messages", $query) ?? []; } /** * Subscribe to a channel using its invite code. Requires an OPERATOR-level key. * * @param array $body Must contain 'inviteCode'. * @return array */ public function subscribe(string $sessionId, array $body): array { return $this->http->request('POST', "/api/sessions/{$this->http->encodeSegment($sessionId)}/channels/subscribe", [], $body); } /** Unsubscribe from a channel. Requires an OPERATOR-level key. */ public function unsubscribe(string $sessionId, string $channelId): array { return $this->http->request('DELETE', "/api/sessions/{$this->http->encodeSegment($sessionId)}/channels/{$this->http->encodeSegment($channelId)}"); } }