# Geoguessr Self-Hosted Reimplementation [![Build Status](https://drone.hiram.services/api/badges/kirkleon/terrassumptions/status.svg)](https://drone.hiram.services/kirkleon/terrassumptions) ## API ``` API Endpoints GET / Returns 200 and { "version": string, "status": string } POST /score Accepts { "point1": { "lat": number, "lng": number }, "point2": { "lat": number, "lng": number } } Returns 400 or 200 and { "score": number, "distance": number } GET /caches Returns 200 and { "caches": [ { "generationMethod": string, "onlyAmerica": boolean, "size": number }, ... ] } PUT /game Accepts { "timer": number, "rounds": number, "onlyAmerica": boolean (default: false), "generationMethod": string (default: "MAPCRUNCH"), "ruleSet": string (default: "NORMAL") } Returns 200 and { "gameId": string } GET /game/{ID}/config Returns 404 vs 200 and { "timer": number, "rounds": number, "onlyAmerica": boolean, "generationMethod": string, "ruleSet": string } GET /game/{ID}/coords Returns 404 vs 200 and { "1": { "lat": number, "lng": number, }, ... } GET /game/{ID}/players Returns 404 vs 200 and { "players": [ { "name": string, "currentRound": string || null, "totalScore": number, "guesses": { "1": { "lat": number, "lng": number, "score": number || null, "timeRemaining": number }, ... } }, ... ] } GET /game/{ID}/linked Returns 404 vs 200 and { "linkedGame": string || null } POST /game/{ID}/linked Accepts { "linkedGame": string } Returns (401, 404) vs 201 GET /game/{ID}/round/{round}/first Returns 404 vs 200 and { "first": string } POST /game/{ID}/join Accepts { "playerName": string } Returns (401, 404, 409) vs 201 and { "playerId": string } GET /game/{ID}/current Header Authorization: Player string Returns (400, 404) vs 200 and { "currentRound": string || null, "coord": { "lat": number, "lng": number, } || null, "timer": number } POST /game/{ID}/guesses/{round} Header Authorization: Player string Accepts { "timeRemaining": number, "lat": number, "lng": number } OR { "timeout": boolean } Returns (400, 401, 404, 409) vs 201 and { "score": number, "totalScore": number, "distance": number || null } ``` ## Next Steps ### Planned Game Modes None currently! Submit ideas! ### Code/Design Improvements - Convert back-end to use a real db (persistence between deployments not necessary for now) - Improve error handling in UI - Improve back-end logging - Override google controls in streetview, make custom divs - Timestamps/hashes in info responses so checks can be faster - Convert to a socket-based api, or use a separate service, to allow timing to be server-side ## Attributions Urban game data is based on the [World Cities Database](https://simplemaps.com/data/world-cities)