diff --git a/packages/server/src/Tracker.js b/packages/server/src/Tracker.js index b2af6d3..70ea7a8 100644 --- a/packages/server/src/Tracker.js +++ b/packages/server/src/Tracker.js @@ -39,6 +39,7 @@ class Tracker { this.identifiers = []; this.initializers = []; this.contextHandlers = []; + this.matcher = null; this.onIdentify = this.onIdentify.bind(this); this.onReconnect = this.onReconnect.bind(this); @@ -49,6 +50,10 @@ class Tracker { this.api = api; } + onMatch(matcher) { + this.matcher = matcher; + } + onIdent(cb) { return registerHandler(this.identifiers, cb); } @@ -91,7 +96,7 @@ class Tracker { user = await this.identifiers.reduce((res, identifier) => { return res.then((identified) => { if (identified) return identified; - return identifier(ident); + return identifier(ident, params); }); }, Promise.resolve(null)); } catch (err) { @@ -159,8 +164,13 @@ class Tracker { }); } - match(url) { - return this.pattern.match(url); + match(url, req) { + const params = this.pattern.match(url); + if (!params || !this.matcher) return params; + + const extraParams = this.matcher(req); + if (!extraParams) return false; + return Object.assign(params, extraParams); } } diff --git a/packages/server/src/createServer.js b/packages/server/src/createServer.js index a4f8159..00a1749 100644 --- a/packages/server/src/createServer.js +++ b/packages/server/src/createServer.js @@ -35,7 +35,7 @@ function createServer({ pulseRate = 30000, killTimeout = 1000 } = {}) { let reqParams = {}; const tracker = trackers.find((t) => { - const params = t.match(request.url); + const params = t.match(request.url, request); if (!params) { return false; }