diff --git a/README.md b/README.md index 243b17b..527b0c8 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,13 @@ $> peerjs --port 9000 --key peerjs --path /myapp Or, create a custom server: +```bash +$> npm install peerjs-server +``` + ```javascript -const { PeerServer } = require('peer'); +import {PeerServer} from 'peerjs-server'; + const server = PeerServer({port: 9000, path: '/myapp'}); ``` @@ -54,8 +59,8 @@ const server = PeerServer({port: 9000, path: '/myapp'}); ### Using HTTPS: Simply pass in PEM-encoded certificate and key. ```javascript -const fs = require('fs'); -const { PeerServer } = require('peer'); +import fs from 'fs'; +import {PeerServer} from 'peerjs-server'; const server = PeerServer({ port: 9000, @@ -74,17 +79,32 @@ The option is passed verbatim to the if it is truthy. ```javascript -const { PeerServer } = require('peer'); +import {PeerServer} from 'peerjs-server'; + const server = PeerServer({port: 9000, path: '/myapp', proxied: true}); ``` + +### Custom client ID generation + +You can specify a custom function to use to generate client IDs. + +```javascript +const genRandomId = () => { + // Original generation algorithm + return (Math.random().toString(36) + '0000000000000000000').substr(2, 16); +} + +const server = PeerServer({port: 9000, path: '/myapp', proxied: true, genRandomId: genRandomId }); +``` + ### Combining with existing express app ```javascript -const express = require('express'); -const app = express(); -const { ExpressPeerServer } = require('peer'); +import express from 'express'; +import {ExpressPeerServer} from 'peerjs-server'; +const app = express(); app.get('/', (req, res, next) => { res.send('Hello world!'); }); // ======= @@ -102,7 +122,9 @@ app.use(options.path, peerserver); // == OR == -const server = require('http').createServer(app); +import http from 'http'; + +const server = http.createServer(app); const peerserver = ExpressPeerServer(server, options); app.use(options.path, peerserver); diff --git a/src/api/v1/public/index.ts b/src/api/v1/public/index.ts index b968102..fc22229 100644 --- a/src/api/v1/public/index.ts +++ b/src/api/v1/public/index.ts @@ -10,7 +10,7 @@ export default ({ config, realm }: { // Retrieve guaranteed random ID. app.get("/id", (_, res: express.Response) => { res.contentType("html"); - res.send(realm.generateClientId()); + res.send(realm.generateClientId(config.genRandomId)); }); // Get a list of all peers for a key, enabled by the `allowDiscovery` flag. diff --git a/src/models/realm.ts b/src/models/realm.ts index cd4d0c9..2bbf85a 100644 --- a/src/models/realm.ts +++ b/src/models/realm.ts @@ -20,7 +20,7 @@ export interface IRealm { clearMessageQueue(id: string): void; - generateClientId(): string; + generateClientId(genRandomId?: () => string): string; } export class Realm implements IRealm { @@ -69,11 +69,14 @@ export class Realm implements IRealm { this.messageQueues.delete(id); } - public generateClientId(): string { - let clientId = uuidv4(); + public generateClientId(genRandomId?: () => string): string { + + const _genRandomId = genRandomId ? genRandomId : uuidv4; + + let clientId = _genRandomId(); while (this.getClientById(clientId)) { - clientId = uuidv4(); + clientId = _genRandomId(); } return clientId; diff --git a/test/models/realm.ts b/test/models/realm.ts index 12608aa..fb24624 100644 --- a/test/models/realm.ts +++ b/test/models/realm.ts @@ -4,9 +4,10 @@ import { Client } from '../../src/models/client'; describe('Realm', () => { describe('#generateClientId', () => { - it('should generate a 36-character UUID', () => { + it('should generate a 36-character UUID, or return function value', () => { const realm = new Realm(); expect(realm.generateClientId().length).to.eq(36); + expect(realm.generateClientId(() => 'abcd')).to.eq('abcd'); }); });