diff --git a/package-lock.json b/package-lock.json index d8b0b1f..ef9b8a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@xtr-dev/rondevu-client", - "version": "0.7.6", + "version": "0.7.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@xtr-dev/rondevu-client", - "version": "0.7.6", + "version": "0.7.7", "license": "MIT", "dependencies": { "@xtr-dev/rondevu-client": "^0.5.1" diff --git a/package.json b/package.json index 8f5a9d3..c2ff57a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@xtr-dev/rondevu-client", - "version": "0.7.6", + "version": "0.7.7", "description": "TypeScript client for Rondevu topic-based peer discovery and signaling server", "type": "module", "main": "dist/index.js", diff --git a/src/peer/answering-state.ts b/src/peer/answering-state.ts index 75fcd8a..2594caa 100644 --- a/src/peer/answering-state.ts +++ b/src/peer/answering-state.ts @@ -28,7 +28,7 @@ export class AnsweringState extends PeerState { // Send answer to server BEFORE setLocalDescription // This registers us as the answerer so ICE candidates will be accepted - await this.peer.offersApi.answer(offerId, answer.sdp!); + await this.peer.offersApi.answer(offerId, answer.sdp!, options.secret); // Enable trickle ICE - set up handler before ICE gathering starts this.setupIceCandidateHandler(); diff --git a/src/peer/creating-offer-state.ts b/src/peer/creating-offer-state.ts index 2dc1bcf..babb1b4 100644 --- a/src/peer/creating-offer-state.ts +++ b/src/peer/creating-offer-state.ts @@ -36,7 +36,8 @@ export class CreatingOfferState extends PeerState { const offers = await this.peer.offersApi.create([{ sdp: offer.sdp!, topics: options.topics, - ttl: options.ttl || 300000 + ttl: options.ttl || 300000, + secret: options.secret }]); const offerId = offers[0].id; diff --git a/src/peer/types.ts b/src/peer/types.ts index f2a4a05..730d1b7 100644 --- a/src/peer/types.ts +++ b/src/peer/types.ts @@ -22,6 +22,8 @@ export interface PeerOptions { topics: string[]; /** How long the offer should live (milliseconds) */ ttl?: number; + /** Optional secret to protect the offer (max 128 characters) */ + secret?: string; /** Whether to create a data channel automatically (for offerer) */ createDataChannel?: boolean; /** Label for the automatically created data channel */