Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(server): Expose API router #698

merged 6 commits into from May 17, 2020

feat(server): Expose API router #698

merged 6 commits into from May 17, 2020


Copy link

@c-w c-w commented May 16, 2020

This pull request refactors to separate setting up the API routes from running the API server. Splitting these responsibilities enables developers to more easily customize hosting of the app, e.g. customizing the CORS setup, mounting the API routes at a path prefix, etc.


  • Use a separate branch in your local repo (not master).
  • Test coverage is 100% (or you have a story for why it's ok).

Copy link

@delucis delucis left a comment

Thanks for this @c-w! I have one small query, but in general this looks like a great idea.

src/types.ts Show resolved Hide resolved
c-w and others added 6 commits May 17, 2020
Instead of passing a lobbyConfig object which may contain a uuid method and potentially also a generateCredentials method, this moves those props to the top-level options, simplifying some specificity chains.
@delucis delucis changed the base branch from master to 0.40.0 May 17, 2020
@delucis delucis merged commit a0c34fd into boardgameio:0.40.0 May 17, 2020
2 checks passed
@c-w c-w deleted the expose-router branch May 17, 2020
@delucis delucis mentioned this pull request May 21, 2020
nicolodavis added a commit that referenced this issue Sep 1, 2020
* feat(server): Expose API router (#698)

BREAKING CHANGES: Previously a custom `uuid` function used by the Lobby API to generate game IDs could be passed in the `lobbyConfig` option on ``. This must now be passed directly to the server:

const server = Server({
  uuid: () => 'id',

### All commits

* Expose API router
* refactor(server): Pass uuid directly to Server and createRouter
* docs(server): Move uuid from lobbyConfig on run to Server options

Co-authored-by: delucis <>

* fix(api): Expose gameover metadata in rooms endpoints. (#666)

* fix(api): Expose gameover metadata in rooms endpoints.

This adds the `gameover` metadata, if it exists, to both the all rooms and single room query endpoints.

Fixes #665.

* Refactor game metadata redacting into a function.

Co-authored-by: Chris Swithinbank <>

* refactor(server): Use the term "match" in the API and Lobby (#704)

Closes #703

* GameMetadata -> MatchMetadata

* rooms -> matches

* API exposes `matchID`, make Lobby use that instead of `gameID` or `roomID`.

* CreateGame -> CreateMatch

* gameID, roomID -> matchID

* Document Lobby API endpoints.

* nextRoomID -> nextMatchID

* Update error messages.

* gameList -> matchList

* Use "match" wherever it makes sense in lobby code.

* Replace "room" with "match" in documentation.

* Rename 'game' to 'match' in comments and test names.

Co-authored-by: Chris Swithinbank <>

* doesGameRequireAuthentication -> doesMatchRequireAuthentication

* Rename gameID to matchID in database interface functions.

Co-authored-by: Chris Swithinbank <>

* Merge branch 'master' into 0.40.0

* feat(server): allow to filter listGames query (#740)

* add createdAt, updatedAt to metadata, add listGames filters

* case-insensitive boolean parsing

* implement inmemory listGames filter

* feat: Add plain JS lobby client (#728)

* feat(server): Create types for Lobby API data

Closes #707

This creates types for data returned by the Lobby API and uses them to 
type the response bodies in the server-side router.

* refactor(types): Include min and max players options in Game interface

* refactor(lobby): Convert connection class to Typescript

* feat(lobby): Create a plain JS LobbyClient

LobbyClient is a lightweight wrapper around `fetch` calls to a Lobby API server. Apart from the server’s base URL, it is 
stateless and serves mainly to allow argument validation and to abstract 
away a few request details. Unlike plain fetch, requests will throw 
errors if they don’t return `ok` (i.e. status 2xx).

* refactor(lobby): Use new LobbyClient class in React lobby connection

* fix(lobby): Include missing import for React types

* docs(api): Update Lobby docs to convert game to match more thoroughly

* docs: Correct inline documentation block

* docs: Update Lobby docs

- Add examples with the plain JS client
- Move the server config details to the Server doc

* feat(lobby): Add support for listMatches filtering to client

#740 added the ability to pass query string parameters to the 
listMatches API endpoint to filter the matches returned. This adds 
support for building the relevant query string to the lobby client’s 
listMatches method.

* test(lobby): Fix type error in Lobby connection test

Add `createdAt` and `updatedAt` fields to mock match data

* test(db): Fix coverage for InMemory storage class

* test(master): Fix muddled updatedAt/gameover tests

Two tests for gameover & updatedAt in match metadata were 
mislabelled/mixed up a bit. This tidies up the confusion and in the 
process improves test coverage.

* test(api): Add coverage for invalid query params when listing matches

* feat: Improve consistency around “match” instead of “game” (#765)

* refactor: Rename `gameID` to `matchID` in clients & transports

* docs: Update to replace `gameID` with `matchID`

* docs: Update example code to use `matchID` instead of `gameID`

* refactor: `gameMetadata` → `matchMetadata` in clients & transports

* refactor: `matchMetadata` → `matchData`

* refactor(types): `MatchMetadata` → `MatchData`

* fix test

Co-authored-by: Clemens Wolff <>
Co-authored-by: Adrian Gaudebert <>
Co-authored-by: janKir <>
Co-authored-by: Nicolo John Davis <>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
None yet
None yet

Successfully merging this pull request may close these issues.

None yet

2 participants