From aa53d5bc3db407e843260b3e666f73bdde83d6fd Mon Sep 17 00:00:00 2001 From: Bas van den Aakster Date: Sat, 22 Nov 2025 16:10:24 +0100 Subject: [PATCH] Add custom peer ID support to register method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update register() to accept optional customPeerId parameter - Add TypeScript documentation with JSDoc comments - Update README with usage examples and documentation - Maintain backward compatibility with auto-generated IDs 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- README.md | 16 ++++++++++++++-- src/auth.ts | 11 +++++++++-- src/rondevu.ts | 5 +++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0e23551..ede24e8 100644 --- a/README.md +++ b/README.md @@ -436,14 +436,26 @@ const newPeers = await client.offers.findByTopic('movie-xyz', { ### Authentication -#### `client.register()` +#### `client.register(customPeerId?)` Register a new peer and receive credentials. ```typescript +// Auto-generate peer ID const creds = await client.register(); -// { peerId: '...', secret: '...' } +// { peerId: 'f17c195f067255e357232e34cf0735d9', secret: '...' } + +// Or use a custom peer ID (1-128 characters) +const customCreds = await client.register('my-custom-peer-id'); +// { peerId: 'my-custom-peer-id', secret: '...' } ``` +**Parameters:** +- `customPeerId` (optional): Custom peer ID (1-128 characters). If not provided, a random ID will be generated. + +**Notes:** +- Returns 409 Conflict if the custom peer ID is already in use +- Custom peer IDs must be non-empty and between 1-128 characters + ### Topics #### `client.offers.getTopics(options?)` diff --git a/src/auth.ts b/src/auth.ts index 9ae7b60..10e1d3c 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -29,14 +29,21 @@ export class RondevuAuth { /** * Register a new peer and receive credentials + * @param customPeerId - Optional custom peer ID (1-128 characters). If not provided, a random ID will be generated. + * @throws Error if registration fails (e.g., peer ID already in use) */ - async register(): Promise { + async register(customPeerId?: string): Promise { + const body: { peerId?: string } = {}; + if (customPeerId !== undefined) { + body.peerId = customPeerId; + } + const response = await this.fetchFn(`${this.baseUrl}/register`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify({}), + body: JSON.stringify(body), }); if (!response.ok) { diff --git a/src/rondevu.ts b/src/rondevu.ts index 7fdefc9..0428e26 100644 --- a/src/rondevu.ts +++ b/src/rondevu.ts @@ -100,9 +100,10 @@ export class Rondevu { /** * Register and initialize authenticated client + * @param customPeerId - Optional custom peer ID (1-128 characters). If not provided, a random ID will be generated. */ - async register(): Promise { - this.credentials = await this.auth.register(); + async register(customPeerId?: string): Promise { + this.credentials = await this.auth.register(customPeerId); // Create offers API instance this._offers = new RondevuOffers(