From 2c3f8ef22b9ba2fea65b63aa0f8f48c3e709ae8b Mon Sep 17 00:00:00 2001 From: Bas van den Aakster Date: Sat, 8 Nov 2025 10:52:56 +0100 Subject: [PATCH] Remove global origin option and update README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove origin option from RondevuClientOptions and RondevuOptions - Remove ConnectOptions interface with global flag - Remove all customHeaders logic for origin override - Update README with consistent Rondevu branding 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- README.md | 8 ++++++-- src/client.ts | 18 +++++------------- src/connection.ts | 8 +++----- src/rondevu.ts | 22 +++++++--------------- src/types.ts | 12 ------------ 5 files changed, 21 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index af88c57..80ce175 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,16 @@ # Rondevu -🎯 Meet WebRTC peers by topic, by peer ID, or by connection ID. +🎯 **Simple WebRTC peer signaling and discovery** + +Meet peers by topic, by peer ID, or by connection ID. + +--- ## @xtr-dev/rondevu-client [![npm version](https://img.shields.io/npm/v/@xtr-dev/rondevu-client)](https://www.npmjs.com/package/@xtr-dev/rondevu-client) -TypeScript Rondevu HTTP and WebRTC client, for simple peer discovery and connection. +TypeScript client library for Rondevu peer signaling and WebRTC connection management. Handles automatic signaling, ICE candidate exchange, and connection establishment. ### Install diff --git a/src/client.ts b/src/client.ts index 956cc12..10ed7bb 100644 --- a/src/client.ts +++ b/src/client.ts @@ -19,7 +19,6 @@ import { */ export class RondevuClient { private readonly baseUrl: string; - private readonly origin: string; private readonly fetchImpl: typeof fetch; /** @@ -28,7 +27,6 @@ export class RondevuClient { */ constructor(options: RondevuClientOptions) { this.baseUrl = options.baseUrl.replace(/\/$/, ''); // Remove trailing slash - this.origin = options.origin || new URL(this.baseUrl).origin; this.fetchImpl = options.fetch || globalThis.fetch.bind(globalThis); } @@ -37,15 +35,12 @@ export class RondevuClient { */ private async request( endpoint: string, - options: RequestInit = {}, - customHeaders?: Record + options: RequestInit = {} ): Promise { const url = `${this.baseUrl}${endpoint}`; const headers: Record = { - 'Origin': this.origin, ...(options.headers as Record), - ...(customHeaders || {}), }; if (options.body) { @@ -144,7 +139,6 @@ export class RondevuClient { * Sends an answer or candidate to an existing session * * @param request - Answer details including session code and signaling data - * @param customHeaders - Optional custom headers to send with the request * @returns Success confirmation * * @example @@ -166,11 +160,11 @@ export class RondevuClient { * }); * ``` */ - async sendAnswer(request: AnswerRequest, customHeaders?: Record): Promise { + async sendAnswer(request: AnswerRequest): Promise { return this.request('/answer', { method: 'POST', body: JSON.stringify(request), - }, customHeaders); + }); } /** @@ -178,7 +172,6 @@ export class RondevuClient { * * @param code - Session UUID * @param side - Which side is polling ('offerer' or 'answerer') - * @param customHeaders - Optional custom headers to send with the request * @returns Session data including offers, answers, and candidates * * @example @@ -198,14 +191,13 @@ export class RondevuClient { */ async poll( code: string, - side: Side, - customHeaders?: Record + side: Side ): Promise { const request: PollRequest = { code, side }; return this.request('/poll', { method: 'POST', body: JSON.stringify(request), - }, customHeaders); + }); } /** diff --git a/src/connection.ts b/src/connection.ts index 964677e..6c1175e 100644 --- a/src/connection.ts +++ b/src/connection.ts @@ -21,9 +21,8 @@ export class RondevuConnection extends EventEmitter { private connectionTimer?: ReturnType; private isPolling: boolean = false; private isClosed: boolean = false; - private customHeaders?: Record; - constructor(params: RondevuConnectionParams, client: RondevuClient, customHeaders?: Record) { + constructor(params: RondevuConnectionParams, client: RondevuClient) { super(); this.id = params.id; this.topic = params.topic; @@ -35,7 +34,6 @@ export class RondevuConnection extends EventEmitter { this.dataChannels = new Map(); this.pollingIntervalMs = params.pollingInterval; this.connectionTimeoutMs = params.connectionTimeout; - this.customHeaders = customHeaders; this.setupEventHandlers(); this.startConnectionTimeout(); @@ -121,7 +119,7 @@ export class RondevuConnection extends EventEmitter { code: this.id, candidate: JSON.stringify(candidate.toJSON()), side: this.role, - }, this.customHeaders); + }); } catch (err: any) { throw new Error(`Failed to send ICE candidate: ${err.message}`); } @@ -171,7 +169,7 @@ export class RondevuConnection extends EventEmitter { } try { - const response = await this.client.poll(this.id, this.role, this.customHeaders); + const response = await this.client.poll(this.id, this.role); if (this.role === 'offerer') { const offererResponse = response as { answer: string | null; answerCandidates: string[] }; diff --git a/src/rondevu.ts b/src/rondevu.ts index fbff01c..ee87c24 100644 --- a/src/rondevu.ts +++ b/src/rondevu.ts @@ -1,6 +1,6 @@ import { RondevuClient } from './client'; import { RondevuConnection } from './connection'; -import { RondevuOptions, JoinOptions, ConnectOptions, RondevuConnectionParams } from './types'; +import { RondevuOptions, JoinOptions, RondevuConnectionParams } from './types'; /** * Main Rondevu WebRTC client with automatic connection management @@ -25,7 +25,6 @@ export class Rondevu { this.client = new RondevuClient({ baseUrl: this.baseUrl, - origin: options.origin, fetch: options.fetch, }); @@ -100,17 +99,11 @@ export class Rondevu { /** * Connect to an existing connection by ID (answerer role) * @param id - Connection identifier - * @param options - Optional connection options (e.g., { global: true } for global origin) * @returns Promise that resolves to RondevuConnection */ - async connect(id: string, options?: ConnectOptions): Promise { - // Build custom headers if global option is set - const customHeaders = options?.global - ? { 'X-Rondevu-Global': 'true' } - : undefined; - + async connect(id: string): Promise { // Poll server to get session by ID - const sessionData = await this.findSessionByIdWithClient(id, this.client, customHeaders); + const sessionData = await this.findSessionByIdWithClient(id, this.client); if (!sessionData) { throw new Error(`Connection ${id} not found or expired`); @@ -137,7 +130,7 @@ export class Rondevu { code: id, answer: pc.localDescription!.sdp, side: 'answerer', - }, customHeaders); + }); // Create connection object const connectionParams: RondevuConnectionParams = { @@ -151,7 +144,7 @@ export class Rondevu { connectionTimeout: this.connectionTimeout, }; - const connection = new RondevuConnection(connectionParams, this.client, customHeaders); + const connection = new RondevuConnection(connectionParams, this.client); // Start polling for ICE candidates connection.startPolling(); @@ -250,8 +243,7 @@ export class Rondevu { */ private async findSessionByIdWithClient( id: string, - client: RondevuClient, - customHeaders?: Record + client: RondevuClient ): Promise<{ code: string; peerId: string; @@ -261,7 +253,7 @@ export class Rondevu { try { // Try to poll for the session directly // The poll endpoint should return the session data - const response = await client.poll(id, 'answerer', customHeaders); + const response = await client.poll(id, 'answerer'); const answererResponse = response as { offer: string; offerCandidates: string[] }; if (answererResponse.offer) { diff --git a/src/types.ts b/src/types.ts index e785565..c6af2f8 100644 --- a/src/types.ts +++ b/src/types.ts @@ -161,8 +161,6 @@ export interface ErrorResponse { export interface RondevuClientOptions { /** Base URL of the Rondevu server (e.g., 'https://example.com') */ baseUrl: string; - /** Origin header value for session isolation (defaults to baseUrl origin) */ - origin?: string; /** Optional fetch implementation (for Node.js environments) */ fetch?: typeof fetch; } @@ -179,8 +177,6 @@ export interface RondevuOptions { baseUrl?: string; /** Peer identifier (optional, auto-generated if not provided) */ peerId?: string; - /** Origin header value for session isolation (defaults to baseUrl origin) */ - origin?: string; /** Optional fetch implementation (for Node.js environments) */ fetch?: typeof fetch; /** WebRTC configuration (ICE servers, etc.) */ @@ -191,14 +187,6 @@ export interface RondevuOptions { connectionTimeout?: number; } -/** - * Options for connecting to a session - */ -export interface ConnectOptions { - /** Use global origin (https://ronde.vu) instead of request origin for session isolation */ - global?: boolean; -} - /** * Options for joining a topic */