Merge branch 'main' into team-names

This commit is contained in:
Mattia Migliorini
2026-04-13 15:09:58 +02:00
committed by GitHub
216 changed files with 8925 additions and 2718 deletions
+15
View File
@@ -0,0 +1,15 @@
# Update schedule for GitHub Actions https://docs.github.com/en/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/keeping-your-actions-up-to-date-with-dependabot
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
groups:
updates:
applies-to: version-updates
patterns: ["*"] #wildcard, needs brackets as bugfix apparently
security:
applies-to: security-updates
patterns: ["*"]
+9 -9
View File
@@ -17,16 +17,16 @@ jobs:
timeout-minutes: 30
steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
submodules: false
- name: Setup node
uses: actions/setup-node@v5
uses: actions/setup-node@v6
with:
node-version: 24
- run: npm ci
- run: npm run build-prod
- uses: actions/upload-artifact@v6
- uses: actions/upload-artifact@v7
with:
path: out/index.html
retention-days: 1
@@ -36,11 +36,11 @@ jobs:
timeout-minutes: 30
steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
with:
submodules: false
- name: Setup node
uses: actions/setup-node@v5
uses: actions/setup-node@v6
with:
node-version: 24
- run: npm ci
@@ -51,8 +51,8 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: "24"
cache: "npm"
@@ -64,8 +64,8 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: "24"
cache: "npm"
+13 -8
View File
@@ -34,6 +34,11 @@ on:
branches:
- "*"
# Nightly build: rebuild and deploy main to nightly.openfront.dev
# 10:00 UTC = 3:00 AM PDT (2:00 AM PST during winter)
schedule:
- cron: "0 10 * * *"
permissions: {}
concurrency:
@@ -42,8 +47,8 @@ concurrency:
jobs:
deploy:
# Don't deploy on push if this is a fork
if: ${{ github.event_name == 'workflow_dispatch' || github.repository == 'openfrontio/OpenFrontIO' }}
# Don't deploy on push if this is a fork; always deploy on schedule and workflow_dispatch
if: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' || github.repository == 'openfrontio/OpenFrontIO' }}
# Use different logic based on event type
name: Deploy to ${{ inputs.target_domain || 'openfront.dev' }}
runs-on: ubuntu-latest
@@ -51,9 +56,9 @@ jobs:
environment: ${{ inputs.target_domain == 'openfront.io' && 'prod' || '' }}
env:
DOMAIN: ${{ inputs.target_domain || 'openfront.dev' }}
SUBDOMAIN: ${{ github.event_name == 'push' && github.ref_name || inputs.target_subdomain || 'main' }}
SUBDOMAIN: ${{ github.event_name == 'schedule' && 'nightly' || github.event_name == 'push' && github.ref_name || inputs.target_subdomain || 'main' }}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- name: 📝 Update job summary
env:
FQDN: ${{ env.SUBDOMAIN && format('{0}.{1}', env.SUBDOMAIN, env.DOMAIN) || env.DOMAIN || 'openfront.dev' }}
@@ -126,12 +131,10 @@ jobs:
chmod 600 ~/.ssh/id_rsa
- name: 🚢 Deploy
env:
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
GHCR_REPO: ${{ vars.GHCR_REPO }}
GHCR_USERNAME: ${{ vars.GHCR_USERNAME }}
ENV: ${{ inputs.target_domain == 'openfront.io' && 'prod' || 'staging' }}
HOST: ${{ github.event_name == 'workflow_dispatch' && inputs.target_host || 'staging' }}
HOST: ${{ github.event_name == 'workflow_dispatch' && inputs.target_host || 'staging' }} # schedule and push both use staging
OTEL_EXPORTER_OTLP_ENDPOINT: ${{ secrets.OTEL_EXPORTER_OTLP_ENDPOINT }}
OTEL_AUTH_HEADER: ${{ secrets.OTEL_AUTH_HEADER }}
TURNSTILE_SECRET_KEY: ${{ secrets.TURNSTILE_SECRET_KEY }}
@@ -147,10 +150,12 @@ jobs:
echo "Deployment created in ${SECONDS} seconds" >> $GITHUB_STEP_SUMMARY
echo "::endgroup::"
- name: ⏳ Wait for deployment to start
env:
API_KEY: ${{ secrets.API_KEY }}
run: |
echo "::group::Wait for deployment to start"
set -euxo pipefail
while [ "$(curl -s https://${FQDN}/commit.txt)" != "${GITHUB_SHA}" ]; do
while [ "$(curl -s -H "X-API-Key: ${API_KEY}" https://${FQDN}/commit.txt)" != "${GITHUB_SHA}" ]; do
if [ "$SECONDS" -ge 300 ]; then
echo "Timeout: deployment did not start within 5 minutes"
exit 1
+13 -17
View File
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- name: 🔗 Log in to Docker Hub
uses: docker/login-action@v4
with:
@@ -51,7 +51,7 @@ jobs:
timeout-minutes: 30
needs: [build]
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- name: 🔑 Create SSH private key
env:
SERVER_HOST_STAGING: ${{ secrets.SERVER_HOST_STAGING }}
@@ -64,8 +64,6 @@ jobs:
chmod 600 ~/.ssh/id_rsa
- name: 🚀 Deploy image
env:
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
GHCR_REPO: openfront-prod
GHCR_USERNAME: ${{ vars.GHCR_USERNAME }}
DOMAIN: ${{ vars.DOMAIN }}
@@ -82,10 +80,11 @@ jobs:
- name: ⏳ Wait for deployment to start
env:
FQDN: alpha.${{ vars.DOMAIN }}
API_KEY: ${{ secrets.API_KEY }}
run: |
echo "::group::Wait for deployment to start"
set -euxo pipefail
while [ "$(curl -s https://${FQDN}/commit.txt)" != "${GITHUB_SHA}" ]; do
while [ "$(curl -s -H "X-API-Key: ${API_KEY}" https://${FQDN}/commit.txt)" != "${GITHUB_SHA}" ]; do
if [ "$SECONDS" -ge 300 ]; then
echo "Timeout: deployment did not start within 5 minutes"
exit 1
@@ -102,7 +101,7 @@ jobs:
timeout-minutes: 30
environment: prod-beta
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- name: 🔑 Create SSH private key
env:
SERVER_HOST_FALK2: ${{ secrets.SERVER_HOST_FALK2 }}
@@ -115,8 +114,6 @@ jobs:
chmod 600 ~/.ssh/id_rsa
- name: 🚀 Deploy image
env:
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
GHCR_REPO: ${{ vars.GHCR_REPO }}
GHCR_USERNAME: ${{ vars.GHCR_USERNAME }}
DOMAIN: ${{ vars.DOMAIN }}
@@ -133,10 +130,11 @@ jobs:
- name: ⏳ Wait for deployment to start
env:
FQDN: beta.${{ vars.DOMAIN }}
API_KEY: ${{ secrets.API_KEY }}
run: |
echo "::group::Wait for deployment to start"
set -euxo pipefail
while [ "$(curl -s https://${FQDN}/commit.txt)" != "${GITHUB_SHA}" ]; do
while [ "$(curl -s -H "X-API-Key: ${API_KEY}" https://${FQDN}/commit.txt)" != "${GITHUB_SHA}" ]; do
if [ "$SECONDS" -ge 300 ]; then
echo "Timeout: deployment did not start within 5 minutes"
exit 1
@@ -153,7 +151,7 @@ jobs:
timeout-minutes: 30
environment: prod-blue
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- name: 🔑 Create SSH private key
env:
SERVER_HOST_FALK2: ${{ secrets.SERVER_HOST_FALK2 }}
@@ -166,8 +164,6 @@ jobs:
chmod 600 ~/.ssh/id_rsa
- name: 🚀 Deploy image
env:
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
GHCR_REPO: ${{ vars.GHCR_REPO }}
GHCR_USERNAME: ${{ vars.GHCR_USERNAME }}
DOMAIN: ${{ vars.DOMAIN }}
@@ -184,10 +180,11 @@ jobs:
- name: ⏳ Wait for deployment to start
env:
FQDN: blue.${{ vars.DOMAIN }}
API_KEY: ${{ secrets.API_KEY }}
run: |
echo "::group::Wait for deployment to start"
set -euxo pipefail
while [ "$(curl -s https://${FQDN}/commit.txt)" != "${GITHUB_SHA}" ]; do
while [ "$(curl -s -H "X-API-Key: ${API_KEY}" https://${FQDN}/commit.txt)" != "${GITHUB_SHA}" ]; do
if [ "$SECONDS" -ge 300 ]; then
echo "Timeout: deployment did not start within 5 minutes"
exit 1
@@ -204,7 +201,7 @@ jobs:
timeout-minutes: 30
environment: prod-green
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- name: 🔑 Create SSH private key
env:
SERVER_HOST_FALK2: ${{ secrets.SERVER_HOST_FALK2 }}
@@ -217,8 +214,6 @@ jobs:
chmod 600 ~/.ssh/id_rsa
- name: 🚀 Deploy image
env:
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
GHCR_REPO: ${{ vars.GHCR_REPO }}
GHCR_USERNAME: ${{ vars.GHCR_USERNAME }}
DOMAIN: ${{ vars.DOMAIN }}
@@ -235,10 +230,11 @@ jobs:
- name: ⏳ Wait for deployment to start
env:
FQDN: green.${{ vars.DOMAIN }}
API_KEY: ${{ secrets.API_KEY }}
run: |
echo "::group::Wait for deployment to start"
set -euxo pipefail
while [ "$(curl -s https://${FQDN}/commit.txt)" != "${GITHUB_SHA}" ]; do
while [ "$(curl -s -H "X-API-Key: ${API_KEY}" https://${FQDN}/commit.txt)" != "${GITHUB_SHA}" ]; do
if [ "$SECONDS" -ge 300 ]; then
echo "Timeout: deployment did not start within 5 minutes"
exit 1
+1
View File
@@ -10,6 +10,7 @@ resources/.DS_Store
.DS_Store
.clinic/
CLAUDE.md
.claude/
.idea/
# this is autogenerated by script
src/assets/
+22
View File
@@ -64,6 +64,23 @@ Licensed under [CC0 1.0.](https://creativecommons.org/publicdomain/zero/1.0/lega
[NASA/JPL-Caltech](https://www.jpl.nasa.gov/images/pia10748-our-milky-way-gets-a-makeover-artist-concept/)
[Public Domain](https://www.jpl.nasa.gov/jpl-image-use-policy/)
### Strait Of Malacca Map
[https://commons.wikimedia.org/wiki/User:Sadalmelik#/media/File:Sumatra_Topography.png](https://commons.wikimedia.org/wiki/File:Sumatra_Topography.png#/media/File:Sumatra_Topography.png)
Sadalmelik - Own work
Topographic map of Sumatra. Created with GMT from publicly released SRTM data. For locator version, see Image:Sumatra Locator Topography.png
CC BY-SA 3.0
File:Sumatra Topography.png
### Luna (The Moon) Map
[https://svs.gsfc.nasa.gov/4720#section_credits]
NASA's Scientific Visualization Studio
Visualizer
Ernie Wright (USRA) ORCID logo.
Scientist
Noah Petro (NASA/GSFC) ORCID logo.
## Icons
### [The Noun Project](https://thenounproject.com/)
@@ -71,3 +88,8 @@ Licensed under [CC0 1.0.](https://creativecommons.org/publicdomain/zero/1.0/lega
Stats icon by [Meko](https://thenounproject.com/mekoda/) https://thenounproject.com/icon/stats-4942475/
Pay Per Click icon by [Fauzan Adiima](https://thenounproject.com/creator/fauzan94/) https://thenounproject.com/icon/pay-per-click-2586454/
Medal icon by [Snow](https://thenounproject.com/snowdoll/) https://thenounproject.com/icon/medal-4567887/
### Flags
[Wikimedia Commons](https://commons.wikimedia.org/wiki/Flag)
Licensed under [CC BY-SA 3.0 DE](https://creativecommons.org/licenses/by-sa/3.0/de/deed.en)
+10 -18
View File
@@ -38,24 +38,14 @@ FROM base
RUN apt-get update && apt-get install -y \
nginx \
curl \
jq \
wget \
supervisor \
apache2-utils \
&& rm -rf /var/lib/apt/lists/*
RUN curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb > cloudflared.deb \
&& dpkg -i cloudflared.deb \
&& rm cloudflared.deb
# Update worker_connections in nginx.conf
RUN sed -i 's/worker_connections [0-9]*/worker_connections 8192/' /etc/nginx/nginx.conf
# Create cloudflared directory with proper permissions
RUN mkdir -p /etc/cloudflared && \
chown -R node:node /etc/cloudflared && \
chmod -R 755 /etc/cloudflared
# Setup supervisor configuration
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
@@ -64,10 +54,6 @@ COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY nginx.conf /etc/nginx/conf.d/default.conf
RUN rm -f /etc/nginx/sites-enabled/default
# Copy and make executable the startup script
COPY startup.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/startup.sh
# Copy production node_modules from prod-deps stage (cached separately from build)
COPY --from=prod-deps /usr/src/app/node_modules ./node_modules
COPY package*.json ./
@@ -87,8 +73,14 @@ ARG GIT_COMMIT=unknown
RUN echo "$GIT_COMMIT" > static/commit.txt
ENV GIT_COMMIT="$GIT_COMMIT"
ENV CF_CONFIG_PATH=/etc/cloudflared/config.yml
ENV CF_CREDS_PATH=/etc/cloudflared/creds.json
# Use the startup script as the entrypoint
ENTRYPOINT ["/usr/local/bin/startup.sh"]
RUN <<'EOF' tee /usr/local/bin/start.sh
#!/bin/sh
if [ "$DOMAIN" = openfront.dev ] && [ "$SUBDOMAIN" != main ]; then
exec timeout 18h /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
else
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi
EOF
RUN chmod +x /usr/local/bin/start.sh
ENTRYPOINT ["/usr/local/bin/start.sh"]
-2
View File
@@ -134,8 +134,6 @@ ENV=$ENV
HOST=$HOST
GHCR_IMAGE=$GHCR_IMAGE
GHCR_TOKEN=$GHCR_TOKEN
CF_ACCOUNT_ID=$CF_ACCOUNT_ID
CF_API_TOKEN=$CF_API_TOKEN
TURNSTILE_SECRET_KEY=$TURNSTILE_SECRET_KEY
API_KEY=$API_KEY
DOMAIN=$DOMAIN
+18 -2
View File
@@ -1,5 +1,7 @@
# API Usage
> **Warning:** Rate limits are very strict. Join the [Discord](https://discord.gg/K9zernJB5z) to request higher rate limits.
## Games
### List Game Metadata
@@ -207,10 +209,24 @@ GET https://api.openfront.io/public/clan/:clanTag/sessions
- `start` (optional): ISO 8601 timestamp
- `end` (optional): ISO 8601 timestamp
- `page` (optional): Page number, 1-200 (default: 1)
- `limit` (optional): Results per page, 1-50 (default: 20)
**Response:**
```json
{
"results": [ ... ],
"total": 150,
"page": 1,
"limit": 20
}
```
Results are ordered by game start time, newest first.
**Example**
```bash
curl https://api.openfront.io/public/clan/UN/sessions?start=2025-11-15T00:00:00Z &
end=2025-11-18T23:59:59Z
curl "https://api.openfront.io/public/clan/UN/sessions?start=2025-11-15T00:00:00Z&end=2025-11-18T23:59:59Z&limit=10&page=1"
```
-3
View File
@@ -6,9 +6,6 @@ GHCR_USERNAME=username
GHCR_REPO=your-repo-name
GHCR_TOKEN=your_docker_token_here
# Cloudflare Configuration
CF_ACCOUNT_ID=your_cloudflare_account_id
CF_API_TOKEN=your_cloudflare_api_token
DOMAIN=your-domain.com
# API Key
+1 -1
View File
@@ -178,7 +178,7 @@
class="fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-99999"
></div>
<gutter-ads></gutter-ads>
<homepage-promos></homepage-promos>
<!-- Main container with responsive padding -->
<main-layout class="contents">
+19 -13
View File
@@ -11,8 +11,9 @@ the [Official Openfront Wiki](https://openfront.wiki/Map_Making)
## Installation
1. Install go <https://go.dev/doc/install>
2. Install dependencies: `go mod download`
3. Run the generator: `go run .`
2. Go to map-generator folder: `cd map-generator`
3. Install dependencies: `go mod download`
4. Run the generator for all maps: `go run .`
## Creating a new map
@@ -20,18 +21,23 @@ the [Official Openfront Wiki](https://openfront.wiki/Map_Making)
2. Create `assets/maps/<map_name>/image.png`
3. Create `assets/maps/<map_name>/info.json` with name and countries
4. Add the map name in `main.go` The `<name>` in `{Name: "<name>"},` should match the `<map-name>` folder at `assets/maps/<map_name>`
5. Run the generator: `go run .`
5. Run the generator for your map: `go run . --maps=<map_name>`
By default, `go run .` will process all defined maps.
Use `--maps` to process a single map:
`go run . --maps=fourislands`
To process a subset of maps, pass a comma-separated list:
`go run . --maps=northamerica,world`
6. Find the output folder at `../resources/maps/<map_name>`
By default, this will process all defined maps.
Use `--maps` to process a single map:
`go run . --maps=fourislands`
To process a subset of maps, pass a comma-separated list:
`go run . --maps=northamerica,world`
7. Go back to the root directory: `cd ..`
8. Run Prettier: `npm run format`
This rewrites ALL files in place. Git figures out which files are actually changed, don't worry.
Alternatively, you can either run Prettier per file: `npx prettier --write resources/maps/<map_name>/<file_name>` or in VSCode install the Prettier extension and per file do Show and run Commands > Format Document.
## Output Files
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

+105
View File
@@ -0,0 +1,105 @@
{
"name": "Conakry",
"nations": [
{
"coordinates": [510, 420],
"name": "Koba-Tatema",
"flag": "gn"
},
{
"coordinates": [680, 150],
"name": "Kenende",
"flag": "gn"
},
{
"coordinates": [1170, 30],
"name": "Dubreka",
"flag": "gn"
},
{
"coordinates": [1280, 280],
"name": "Tamouta",
"flag": "gn"
},
{
"coordinates": [1320, 550],
"name": "Ratoma",
"flag": "gn"
},
{
"coordinates": [1350, 40],
"name": "Coyah",
"flag": "gn"
},
{
"coordinates": [1630, 160],
"name": "Maferenya",
"flag": "gn"
},
{
"coordinates": [1730, 460],
"name": "Kaback",
"flag": "gn"
},
{
"coordinates": [2130, 80],
"name": "Forecariah",
"flag": "gn"
},
{
"coordinates": [2280, 440],
"name": "Laya",
"flag": "gn"
},
{
"coordinates": [1200, 910],
"name": "Fotoba",
"flag": "gn"
},
{
"coordinates": [1333, 835],
"name": "Ilot Cabri",
"flag": "gn"
},
{
"coordinates": [716, 260],
"name": "Bolonta",
"flag": "gn"
},
{
"coordinates": [870, 370],
"name": "Kanka",
"flag": "gn"
},
{
"coordinates": [940, 115],
"name": "Mangueya",
"flag": "gn"
},
{
"coordinates": [1975, 475],
"name": "Yelibane",
"flag": "gn"
},
{
"coordinates": [1900, 115],
"name": "Dandaya",
"flag": "gn"
},
{
"coordinates": [80, 480],
"name": "Marara",
"flag": "gn"
},
{
"coordinates": [390, 210],
"name": "Boufou",
"flag": "gn"
},
{
"coordinates": [180, 130],
"name": "Dioumaya",
"flag": "gn"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

@@ -0,0 +1,335 @@
{
"name": "Dyslexdria",
"nations": [
{
"coordinates": [2260, 400],
"flag": "west_germany",
"name": "Jermaine"
},
{
"coordinates": [2111, 399],
"flag": "fr",
"name": "Pants"
},
{
"coordinates": [2050, 460],
"flag": "Fascist Spain",
"name": "Splain"
},
{
"coordinates": [2200, 470],
"flag": "it",
"name": "Idoly"
},
{
"coordinates": [980, 375],
"flag": "gb",
"name": "Graet Brian"
},
{
"coordinates": [2265, 510],
"flag": "gr",
"name": "Grace"
},
{
"coordinates": [2342, 436],
"flag": "Communist Romania",
"name": "Rollandia"
},
{
"coordinates": [1222, 310],
"flag": "Ukrainian SSR",
"name": "Ucryin"
},
{
"coordinates": [2235, 290],
"flag": "se",
"name": "Veden"
},
{
"coordinates": [2190, 250],
"flag": "no",
"name": "Morvay"
},
{
"coordinates": [2330, 280],
"flag": "fi",
"name": "Binland"
},
{
"coordinates": [1280, 285],
"flag": "Russian SSR",
"name": "Rusha"
},
{
"coordinates": [2555, 475],
"flag": "Georgian SSR",
"name": "Georgia"
},
{
"coordinates": [1105, 620],
"flag": "Second Republic of Iraq",
"name": "Irap"
},
{
"coordinates": [1370, 670],
"flag": "ae",
"name": "United Bara Estimates"
},
{
"coordinates": [356, 980],
"flag": "Pahlavi Iran",
"name": "Iram"
},
{
"coordinates": [2630, 740],
"flag": "pk",
"name": "Plackitstan"
},
{
"coordinates": [2650, 640],
"flag": "af",
"name": "Agraphistan"
},
{
"coordinates": [1260, 400],
"flag": "Kazakh SSR",
"name": "Azakah"
},
{
"coordinates": [1430, 390],
"flag": "Zheleznogorsk",
"name": "Zheleznogzorzkz"
},
{
"coordinates": [50, 450],
"flag": "Siberia",
"name": "Shiberia"
},
{
"coordinates": [2690, 950],
"flag": "in",
"name": "Indiana"
},
{
"coordinates": [295, 1325],
"flag": "is",
"name": "Ikeland"
},
{
"coordinates": [2020, 900],
"flag": "bd",
"name": "Bangledash"
},
{
"coordinates": [1085, 885],
"flag": "cn",
"name": "Jina"
},
{
"coordinates": [65, 795],
"flag": "kp",
"name": "West Cornea"
},
{
"coordinates": [80, 805],
"flag": "kr",
"name": "East Cornea"
},
{
"coordinates": [2890, 300],
"flag": "jp",
"name": "Chapan"
},
{
"coordinates": [2900, 650],
"flag": "mn",
"name": "Mongoalina"
},
{
"coordinates": [2385, 1070],
"flag": "id",
"name": "Endonisia"
},
{
"coordinates": [880, 950],
"flag": "vn",
"name": "North Vitamen"
},
{
"coordinates": [856, 996],
"flag": "South Vietnam",
"name": "South Vitamen"
},
{
"coordinates": [120, 945],
"flag": "pg",
"name": "Papa No Guine"
},
{
"coordinates": [785, 615],
"flag": "au",
"name": "Austria"
},
{
"coordinates": [335, 400],
"flag": "nz",
"name": "New Sealand"
},
{
"coordinates": [360, 70],
"flag": "an_pe",
"name": "Amtarctica"
},
{
"coordinates": [100, 70],
"flag": "sardines",
"name": "Dophlin Confeteracy"
},
{
"coordinates": [2555, 50],
"flag": "aq",
"name": "Arctica"
},
{
"coordinates": [1950, 1305],
"flag": "santa_claus",
"name": "Nort Pole"
},
{
"coordinates": [1020, 490],
"flag": "ly",
"name": "Lidya"
},
{
"coordinates": [380, 855],
"flag": "dz",
"name": "Alberia"
},
{
"coordinates": [1215, 790],
"flag": "so",
"name": "Slomia"
},
{
"coordinates": [550, 770],
"flag": "Mauritania",
"name": "Manchurian"
},
{
"coordinates": [1735, 860],
"flag": "ne",
"name": "Nigel"
},
{
"coordinates": [630, 825],
"flag": "lr",
"name": "Libraria"
},
{
"coordinates": [2970, 735],
"flag": "cf",
"name": "Center Africa"
},
{
"coordinates": [2950, 1150],
"flag": "Apartheid South Africa",
"name": "Southern African State"
},
{
"coordinates": [1620, 670],
"flag": "mg",
"name": "Madalplascar"
},
{
"coordinates": [2860, 1050],
"flag": "Apartheid South Africa",
"name": "Southern South West Africa"
},
{
"coordinates": [1400, 500],
"flag": "br",
"name": "Brailzil"
},
{
"coordinates": [1480, 865],
"flag": "Cthulhu Republic",
"name": "Anazom Warehouse"
},
{
"coordinates": [1620, 230],
"flag": "ar",
"name": "Aregano"
},
{
"coordinates": [1750, 600],
"flag": "cl",
"name": "Philly"
},
{
"coordinates": [1150, 400],
"flag": "ve",
"name": "Venice"
},
{
"coordinates": [2060, 900],
"flag": "ni",
"name": "Nicargo"
},
{
"coordinates": [1910, 440],
"flag": "mx",
"name": "Xico"
},
{
"coordinates": [2170, 600],
"flag": "us",
"name": "Untitled States"
},
{
"coordinates": [1960, 530],
"flag": "Texas",
"name": "Taxes"
},
{
"coordinates": [2860, 400],
"flag": "California",
"name": "Calizonia"
},
{
"coordinates": [2300, 765],
"flag": "Newfoundland",
"name": "Foundland"
},
{
"coordinates": [2020, 750],
"flag": "ca",
"name": "Canananada"
},
{
"coordinates": [1440, 1000],
"flag": "Alaska",
"name": "Eleske"
},
{
"coordinates": [484, 256],
"flag": "Yukon",
"name": "Yukant"
},
{
"coordinates": [500, 1200],
"flag": "gl",
"name": "Greedland"
},
{
"coordinates": [1515, 1313],
"flag": "polar_bears",
"name": "Bearguin Aliance"
},
{
"coordinates": [3060, 100],
"flag": "Republic of Pirates",
"name": "Biosphere Conmune"
}
]
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 MiB

After

Width:  |  Height:  |  Size: 2.5 MiB

+54 -49
View File
@@ -2,249 +2,254 @@
"name": "Europe",
"nations": [
{
"coordinates": [148, 744],
"coordinates": [634, 781],
"name": "Republic of Ireland",
"flag": "ie"
},
{
"coordinates": [451, 785],
"coordinates": [962, 780],
"name": "England",
"flag": "gb-eng"
},
{
"coordinates": [285, 1253],
"coordinates": [935, 1289],
"name": "Kingdom of Spain",
"flag": "es"
},
{
"coordinates": [527, 979],
"coordinates": [1087, 931],
"name": "French Republic",
"flag": "fr"
},
{
"coordinates": [974, 1159],
"coordinates": [1541, 1180],
"name": "Italian Republic",
"flag": "it"
},
{
"coordinates": [761, 1013],
"coordinates": [1339, 983],
"name": "Swiss Confederation",
"flag": "ch"
},
{
"coordinates": [789, 451],
"coordinates": [1360, 428],
"name": "Kingdom of Norway",
"flag": "no"
},
{
"coordinates": [1034, 562],
"coordinates": [1605, 573],
"name": "Kingdom of Sweden",
"flag": "se"
},
{
"coordinates": [1368, 369],
"coordinates": [2007, 309],
"name": "Republic of Finland",
"flag": "fi"
},
{
"coordinates": [633, 802],
"coordinates": [1200, 830],
"name": "Kingdom of Belgium",
"flag": "be"
},
{
"coordinates": [647, 754],
"coordinates": [1264, 752],
"name": "Kingdom of the Netherlands",
"flag": "nl"
},
{
"coordinates": [904, 805],
"coordinates": [1443, 798],
"name": "Federal Republic of Germany",
"flag": "de"
},
{
"coordinates": [1082, 953],
"coordinates": [1444, 969],
"name": "Republic of Austria",
"flag": "at"
},
{
"coordinates": [1274, 739],
"coordinates": [1850, 810],
"name": "Republic of Poland",
"flag": "pl"
},
{
"coordinates": [1098, 872],
"coordinates": [1630, 909],
"name": "Czech Republic",
"flag": "cz"
},
{
"coordinates": [1802, 933],
"coordinates": [2342, 936],
"name": "Ukraine",
"flag": "ua"
},
{
"coordinates": [1562, 730],
"coordinates": [2167, 708],
"name": "Republic of Belarus",
"flag": "by"
},
{
"coordinates": [1533, 1039],
"coordinates": [2046, 990],
"name": "Romania",
"flag": "ro"
},
{
"coordinates": [1770, 1304],
"coordinates": [2432, 1265],
"name": "Republic of Turkiye",
"flag": "tr"
},
{
"coordinates": [180, 1525],
"coordinates": [769, 1535],
"name": "Kingdom of Morocco",
"flag": "ma"
},
{
"coordinates": [2069, 659],
"coordinates": [2535, 720],
"name": "Russian Federation",
"flag": "ru"
},
{
"coordinates": [1952, 1433],
"coordinates": [2539, 1455],
"name": "Syrian Arab Republic",
"flag": "sy"
},
{
"coordinates": [2264, 1529],
"coordinates": [2689, 1441],
"name": "Republic of Iraq",
"flag": "iq"
},
{
"coordinates": [2173, 1173],
"coordinates": [2748, 1138],
"name": "Georgia",
"flag": "ge"
},
{
"coordinates": [832, 1434],
"coordinates": [1389, 1473],
"name": "Republic of Tunisia",
"flag": "tn"
},
{
"coordinates": [517, 1483],
"coordinates": [1066, 1506],
"name": "Algeria",
"flag": "dz"
},
{
"coordinates": [89, 1292],
"coordinates": [680, 1254],
"name": "Portuguese Republic",
"flag": "pt"
},
{
"coordinates": [1335, 1312],
"coordinates": [1891, 1299],
"name": "Hellenic Republic",
"flag": "gr"
},
{
"coordinates": [1312, 1133],
"coordinates": [1906, 1113],
"name": "Republic of Serbia",
"flag": "rs"
},
{
"coordinates": [1281, 999],
"coordinates": [1751, 983],
"name": "Republic of Hungary",
"flag": "hu"
},
{
"coordinates": [1254, 899],
"coordinates": [1784, 908],
"name": "Slovak Republic",
"flag": "sk"
},
{
"coordinates": [1002, 1061],
"coordinates": [1624, 1038],
"name": "Republic of Croatia",
"flag": "hr"
},
{
"coordinates": [1174, 1108],
"coordinates": [1734, 1094],
"name": "Bosnia and Herzegovina",
"flag": "ba"
},
{
"coordinates": [1259, 1236],
"coordinates": [1817, 1213],
"name": "Republic of Albania",
"flag": "al"
},
{
"coordinates": [1556, 1200],
"coordinates": [2092, 1158],
"name": "Republic of Bulgaria",
"flag": "bg"
},
{
"coordinates": [1380, 618],
"coordinates": [1939, 702],
"name": "Republic of Lithuania",
"flag": "lt"
},
{
"coordinates": [1360, 556],
"coordinates": [2014, 618],
"name": "Republic of Latvia",
"flag": "lv"
},
{
"coordinates": [1443, 502],
"coordinates": [2033, 504],
"name": "Republic of Estonia",
"flag": "ee"
},
{
"coordinates": [278, 742],
"coordinates": [863, 775],
"name": "Wales",
"flag": "gb-wls"
},
{
"coordinates": [296, 601],
"coordinates": [863, 573],
"name": "Scotland",
"flag": "gb-sct"
},
{
"coordinates": [2300, 510],
"coordinates": [2688, 427],
"name": "USSR",
"flag": "ussr"
},
{
"coordinates": [204, 667],
"coordinates": [719, 685],
"name": "Northern Ireland",
"flag": "northern_ireland"
},
{
"coordinates": [1522, 48],
"coordinates": [2011, 103],
"name": "Polar Bears",
"flag": "polar_bears"
},
{
"coordinates": [821, 628],
"coordinates": [1369, 628],
"name": "Kingdom of Denmark",
"flag": "dk"
},
{
"coordinates": [1875, 1599],
"coordinates": [2406, 1638],
"name": "State of Israel",
"flag": "il"
},
{
"coordinates": [1691, 1667],
"coordinates": [2226, 1661],
"name": "Arab Republic of Egypt",
"flag": "eg"
},
{
"coordinates": [1115, 1650],
"coordinates": [1847, 1652],
"name": "State of Libya",
"flag": "ly"
},
{
"coordinates": [1919, 1608],
"coordinates": [2571, 1601],
"name": "Hashemite Kingdom of Jordan",
"flag": "jo"
},
{
"coordinates": [1898, 1535],
"coordinates": [2473, 1528],
"name": "Lebanese Republic",
"flag": "lb"
},
{
"coordinates": [254, 274],
"name": "Iceland",
"flag": "is"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

@@ -0,0 +1,175 @@
{
"name": "greatlakes",
"nations": [
{
"coordinates": [38, 326],
"name": "Duluth",
"flag": "Minnesota"
},
{
"coordinates": [325, 135],
"name": "Thunder Bay",
"flag": "ca"
},
{
"coordinates": [776, 36],
"name": "Marathon",
"flag": "ca"
},
{
"coordinates": [965, 154],
"name": "Wawa",
"flag": "ca"
},
{
"coordinates": [979, 411],
"name": "Sault Ste. Marie",
"flag": "ca"
},
{
"coordinates": [1506, 580],
"name": "Parry Sound",
"flag": "ca"
},
{
"coordinates": [534, 385],
"name": "Marquette",
"flag": "Michigan"
},
{
"coordinates": [618, 577],
"name": "Escanaba",
"flag": "Michigan"
},
{
"coordinates": [517, 785],
"name": "Green Bay",
"flag": "Wisconsin"
},
{
"coordinates": [497, 1042],
"name": "Milwaukee",
"flag": "Wisconsin"
},
{
"coordinates": [576, 1287],
"name": "Chicago",
"flag": "Illinois"
},
{
"coordinates": [765, 1002],
"name": "Muskegon",
"flag": "Michigan"
},
{
"coordinates": [714, 1276],
"name": "Gary",
"flag": "Indiana"
},
{
"coordinates": [1049, 667],
"name": "Alpena",
"flag": "Michigan"
},
{
"coordinates": [1923, 771],
"name": "Kingston",
"flag": "ca"
},
{
"coordinates": [1934, 999],
"name": "Rochester",
"flag": "New_York"
},
{
"coordinates": [1681, 1053],
"name": "Buffalo",
"flag": "New_York"
},
{
"coordinates": [1602, 881],
"name": "Toronto",
"flag": "ca"
},
{
"coordinates": [1120, 1098],
"name": "Detroit",
"flag": "Michigan"
},
{
"coordinates": [1004, 937],
"name": "Saginaw",
"flag": "Michigan"
},
{
"coordinates": [1111, 1276],
"name": "Toledo",
"flag": "Ohio"
},
{
"coordinates": [1365, 1276],
"name": "Cleveland",
"flag": "Ohio"
},
{
"coordinates": [1545, 1199],
"name": "Erie",
"flag": "Pennsylvania"
},
{
"coordinates": [1342, 906],
"name": "Goderich",
"flag": "ca"
},
{
"coordinates": [1247, 1098],
"name": "Windsor",
"flag": "ca"
},
{
"coordinates": [1962, 563],
"name": "Ottawa",
"flag": "ca"
},
{
"coordinates": [246, 1056],
"name": "Madison",
"flag": "Wisconsin"
},
{
"coordinates": [244, 447],
"name": "Ashland",
"flag": "Wisconsin"
},
{
"coordinates": [246, 687],
"name": "Wausau",
"flag": "Wisconsin"
},
{
"coordinates": [153, 1259],
"name": "Davenport",
"flag": "Iowa"
},
{
"coordinates": [1568, 368],
"name": "North Bay",
"flag": "ca"
},
{
"coordinates": [1311, 120],
"name": "Timmins",
"flag": "ca"
},
{
"coordinates": [925, 1118],
"name": "Lansing",
"flag": "Michigan"
},
{
"coordinates": [1662, 80],
"name": "Rouyn-Noranda",
"flag": "ca"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

+136
View File
@@ -0,0 +1,136 @@
{
"name": "Luna",
"nations": [
{
"coordinates": [265, 662],
"flag": "us",
"name": "Apollo 12"
},
{
"coordinates": [550, 600],
"flag": "us",
"name": "Apollo 14"
},
{
"coordinates": [780, 345],
"flag": "us",
"name": "Apollo 15"
},
{
"coordinates": [825, 735],
"flag": "us",
"name": "Apollo 11"
},
{
"coordinates": [875, 990],
"flag": "us",
"name": "Apollo 16"
},
{
"coordinates": [1160, 490],
"flag": "us",
"name": "Apollo 17"
},
{
"coordinates": [1160, 2850],
"flag": "us",
"name": "Surveyor 3"
},
{
"coordinates": [256, 148],
"flag": "us",
"name": "Apollo 13"
},
{
"coordinates": [650, 1750],
"flag": "us",
"name": "Artemis II"
},
{
"coordinates": [510, 170],
"flag": "Russian SSR",
"name": "Luna 17"
},
{
"coordinates": [1050, 385],
"flag": "Russian SSR",
"name": "Luna 21"
},
{
"coordinates": [1030, 790],
"flag": "Russian SSR",
"name": "Luna 16"
},
{
"coordinates": [1090, 2640],
"flag": "Russian SSR",
"name": "Luna 9"
},
{
"coordinates": [130, 2890],
"flag": "Russian SSR",
"name": "Luna 24"
},
{
"coordinates": [310, 1167],
"flag": "Russian SSR",
"name": "Luna 25"
},
{
"coordinates": [1043, 2393],
"flag": "Russian SSR",
"name": "Luna 1"
},
{
"coordinates": [672, 2323],
"flag": "cn",
"name": "Chang'e 3"
},
{
"coordinates": [650, 2750],
"flag": "cn",
"name": "Chang'e 4"
},
{
"coordinates": [270, 2690],
"flag": "cn",
"name": "Chang'e 5"
},
{
"coordinates": [910, 3190],
"flag": "cn",
"name": "Chang'e 6"
},
{
"coordinates": [830, 735],
"flag": "jp",
"name": "S.L.I.M."
},
{
"coordinates": [400, 3360],
"flag": "in",
"name": "Chandrayaan 3"
},
{
"coordinates": [732, 3490],
"flag": "in",
"name": "Chandrayaan 1"
},
{
"coordinates": [755, 3035],
"flag": "",
"name": "T▅▚░S▅cr▅▟░M▅l▅t▅r▅░B▅s▅"
},
{
"coordinates": [628, 921],
"flag": "",
"name": "[]"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 379 KiB

@@ -0,0 +1,50 @@
{
"name": "straitofmalacca",
"nations": [
{
"coordinates": [1268, 730],
"name": "Singapore",
"flag": "sg"
},
{
"coordinates": [862, 41],
"name": "Thailand",
"flag": "th"
},
{
"coordinates": [1328, 1284],
"name": "Sumatra",
"flag": "id"
},
{
"coordinates": [1141, 1090],
"name": "Burmese Pythons",
"flag": "mm"
},
{
"coordinates": [210, 243],
"name": "Aceh",
"flag": "id"
},
{
"coordinates": [1011, 736],
"name": "Riau",
"flag": "id"
},
{
"coordinates": [600, 565],
"name": "Samosir",
"flag": "id"
},
{
"coordinates": [827, 999],
"name": "Barisan",
"flag": "id"
},
{
"coordinates": [1053, 333],
"name": "Malaysia",
"flag": "my"
}
]
}
+5
View File
@@ -50,6 +50,7 @@ var maps = []struct {
{Name: "japan"},
{Name: "lisbon"},
{Name: "manicouagan"},
{Name: "straitofmalacca"},
{Name: "mars"},
{Name: "mena"},
{Name: "montreal"},
@@ -85,6 +86,10 @@ var maps = []struct {
{Name: "aegean"},
{Name: "milkyway"},
{Name: "mediterranean"},
{Name: "greatlakes"},
{Name: "dyslexdria"},
{Name: "luna"},
{Name: "conakry"},
{Name: "big_plains", IsTest: true},
{Name: "half_land_half_ocean", IsTest: true},
{Name: "ocean_and_land", IsTest: true},
+7 -1
View File
@@ -12,7 +12,13 @@ proxy_cache_path /var/cache/nginx/api levels=1:2 keys_zone=API_CACHE:10m inactiv
server {
listen 80 default_server;
# Large cookie support
large_client_header_buffers 4 32k;
proxy_buffer_size 32k;
proxy_busy_buffers_size 48k;
proxy_buffers 4 32k;
# Logging
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
+245 -374
View File
@@ -24,7 +24,7 @@
"dompurify": "^3.3.2",
"dotenv": "^16.5.0",
"ejs": "^3.1.10",
"express": "^4.22.1",
"express": "^5.2.1",
"express-rate-limit": "^7.5.0",
"fastpriorityqueue": "^0.7.5",
"howler": "^2.2.4",
@@ -52,7 +52,7 @@
"@types/benchmark": "^2.1.5",
"@types/chai": "^4.3.17",
"@types/d3": "^7.4.3",
"@types/express": "^4.17.23",
"@types/express": "^5.0.6",
"@types/google-protobuf": "^3.15.12",
"@types/hammerjs": "^2.0.46",
"@types/howler": "^2.2.12",
@@ -97,7 +97,7 @@
"tsconfig-paths": "^4.2.0",
"typescript": "^5.7.2",
"typescript-eslint": "^8.26.0",
"vite": "^7.3.0",
"vite": "^7.3.2",
"vite-plugin-html": "^3.2.2",
"vite-plugin-static-copy": "^3.1.4",
"vite-tsconfig-paths": "^6.0.3",
@@ -4504,21 +4504,20 @@
"license": "MIT"
},
"node_modules/@types/express": {
"version": "4.17.23",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz",
"integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==",
"version": "5.0.6",
"resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz",
"integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==",
"license": "MIT",
"dependencies": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.33",
"@types/qs": "*",
"@types/serve-static": "*"
"@types/express-serve-static-core": "^5.0.0",
"@types/serve-static": "^2"
}
},
"node_modules/@types/express-serve-static-core": {
"version": "4.19.6",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
"integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz",
"integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==",
"license": "MIT",
"dependencies": {
"@types/node": "*",
@@ -4592,12 +4591,6 @@
"dev": true,
"license": "MIT"
},
"node_modules/@types/mime": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
"license": "MIT"
},
"node_modules/@types/msgpack5": {
"version": "3.4.6",
"resolved": "https://registry.npmjs.org/@types/msgpack5/-/msgpack5-3.4.6.tgz",
@@ -4632,9 +4625,9 @@
}
},
"node_modules/@types/qs": {
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz",
"integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",
"version": "6.15.0",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz",
"integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==",
"license": "MIT"
},
"node_modules/@types/range-parser": {
@@ -4661,24 +4654,22 @@
"license": "MIT"
},
"node_modules/@types/send": {
"version": "0.17.5",
"resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz",
"integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz",
"integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==",
"license": "MIT",
"dependencies": {
"@types/mime": "^1",
"@types/node": "*"
}
},
"node_modules/@types/serve-static": {
"version": "1.15.8",
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz",
"integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==",
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz",
"integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==",
"license": "MIT",
"dependencies": {
"@types/http-errors": "*",
"@types/node": "*",
"@types/send": "*"
"@types/node": "*"
}
},
"node_modules/@types/sinon": {
@@ -5219,9 +5210,9 @@
"license": "BSD-3-Clause"
},
"node_modules/@xmldom/xmldom": {
"version": "0.8.11",
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz",
"integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==",
"version": "0.8.12",
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.12.tgz",
"integrity": "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5242,13 +5233,13 @@
}
},
"node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
"integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
"license": "MIT",
"dependencies": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
"mime-types": "^3.0.0",
"negotiator": "^1.0.0"
},
"engines": {
"node": ">= 0.6"
@@ -5361,12 +5352,6 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"license": "Python-2.0"
},
"node_modules/array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
"license": "MIT"
},
"node_modules/assertion-error": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
@@ -5525,52 +5510,23 @@
}
},
"node_modules/body-parser": {
"version": "1.20.4",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz",
"integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==",
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
"integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
"license": "MIT",
"dependencies": {
"bytes": "~3.1.2",
"content-type": "~1.0.5",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "~1.2.0",
"http-errors": "~2.0.1",
"iconv-lite": "~0.4.24",
"on-finished": "~2.4.1",
"qs": "~6.14.0",
"raw-body": "~2.5.3",
"type-is": "~1.6.18",
"unpipe": "~1.0.0"
"bytes": "^3.1.2",
"content-type": "^1.0.5",
"debug": "^4.4.3",
"http-errors": "^2.0.0",
"iconv-lite": "^0.7.0",
"on-finished": "^2.4.1",
"qs": "^6.14.1",
"raw-body": "^3.0.1",
"type-is": "^2.0.1"
},
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/body-parser/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/body-parser/node_modules/http-errors": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
"integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
"license": "MIT",
"dependencies": {
"depd": "~2.0.0",
"inherits": "~2.0.4",
"setprototypeof": "~1.2.0",
"statuses": "~2.0.2",
"toidentifier": "~1.0.1"
},
"engines": {
"node": ">= 0.8"
"node": ">=18"
},
"funding": {
"type": "opencollective",
@@ -5578,30 +5534,19 @@
}
},
"node_modules/body-parser/node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
"integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
},
"node_modules/body-parser/node_modules/statuses": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
"integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/boolbase": {
@@ -6258,15 +6203,16 @@
"license": "MIT"
},
"node_modules/content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz",
"integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==",
"license": "MIT",
"dependencies": {
"safe-buffer": "5.2.1"
},
"engines": {
"node": ">= 0.6"
"node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/content-type": {
@@ -6288,10 +6234,13 @@
}
},
"node_modules/cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
"license": "MIT"
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
"integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
"license": "MIT",
"engines": {
"node": ">=6.6.0"
}
},
"node_modules/create-require": {
"version": "1.1.1",
@@ -6861,10 +6810,9 @@
}
},
"node_modules/debug": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
"integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
"dev": true,
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -6956,16 +6904,6 @@
"node": ">= 0.8"
}
},
"node_modules/destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
"license": "MIT",
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/detect-libc": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
@@ -7625,45 +7563,42 @@
}
},
"node_modules/express": {
"version": "4.22.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz",
"integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==",
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
"integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
"license": "MIT",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "~1.20.3",
"content-disposition": "~0.5.4",
"content-type": "~1.0.4",
"cookie": "~0.7.1",
"cookie-signature": "~1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "~1.3.1",
"fresh": "~0.5.2",
"http-errors": "~2.0.0",
"merge-descriptors": "1.0.3",
"methods": "~1.1.2",
"on-finished": "~2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "~0.1.12",
"proxy-addr": "~2.0.7",
"qs": "~6.14.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "~0.19.0",
"serve-static": "~1.16.2",
"setprototypeof": "1.2.0",
"statuses": "~2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
"accepts": "^2.0.0",
"body-parser": "^2.2.1",
"content-disposition": "^1.0.0",
"content-type": "^1.0.5",
"cookie": "^0.7.1",
"cookie-signature": "^1.2.1",
"debug": "^4.4.0",
"depd": "^2.0.0",
"encodeurl": "^2.0.0",
"escape-html": "^1.0.3",
"etag": "^1.8.1",
"finalhandler": "^2.1.0",
"fresh": "^2.0.0",
"http-errors": "^2.0.0",
"merge-descriptors": "^2.0.0",
"mime-types": "^3.0.0",
"on-finished": "^2.4.1",
"once": "^1.4.0",
"parseurl": "^1.3.3",
"proxy-addr": "^2.0.7",
"qs": "^6.14.0",
"range-parser": "^1.2.1",
"router": "^2.2.0",
"send": "^1.1.0",
"serve-static": "^2.2.0",
"statuses": "^2.0.1",
"type-is": "^2.0.1",
"vary": "^1.1.2"
},
"engines": {
"node": ">= 0.10.0"
"node": ">= 18"
},
"funding": {
"type": "opencollective",
@@ -7685,21 +7620,6 @@
"express": "^4.11 || 5 || ^5.0.0-beta.1"
}
},
"node_modules/express/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/express/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -7863,38 +7783,26 @@
}
},
"node_modules/finalhandler": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
"integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",
"integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",
"license": "MIT",
"dependencies": {
"debug": "2.6.9",
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"unpipe": "~1.0.0"
"debug": "^4.4.0",
"encodeurl": "^2.0.0",
"escape-html": "^1.0.3",
"on-finished": "^2.4.1",
"parseurl": "^1.3.3",
"statuses": "^2.0.1"
},
"engines": {
"node": ">= 0.8"
"node": ">= 18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/finalhandler/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/finalhandler/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
},
"node_modules/flat-cache": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
@@ -7946,12 +7854,12 @@
}
},
"node_modules/fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
"integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
"node": ">= 0.8"
}
},
"node_modules/fs-constants": {
@@ -8274,19 +8182,23 @@
"license": "MIT"
},
"node_modules/http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
"integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
"license": "MIT",
"dependencies": {
"depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"toidentifier": "1.0.1"
"depd": "~2.0.0",
"inherits": "~2.0.4",
"setprototypeof": "~1.2.0",
"statuses": "~2.0.2",
"toidentifier": "~1.0.1"
},
"engines": {
"node": ">= 0.8"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/http-proxy-agent": {
@@ -8540,6 +8452,12 @@
"dev": true,
"license": "MIT"
},
"node_modules/is-promise": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
"integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
"license": "MIT"
},
"node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -9314,9 +9232,9 @@
}
},
"node_modules/lodash": {
"version": "4.17.23",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"version": "4.18.1",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
"dev": true,
"license": "MIT"
},
@@ -9618,19 +9536,22 @@
"license": "CC0-1.0"
},
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
"integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
"node": ">= 0.8"
}
},
"node_modules/merge-descriptors": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
"integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
"integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
"license": "MIT",
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
@@ -9645,15 +9566,6 @@
"node": ">= 8"
}
},
"node_modules/methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
@@ -9668,37 +9580,29 @@
"node": ">=8.6"
}
},
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"license": "MIT",
"bin": {
"mime": "cli.js"
},
"engines": {
"node": ">=4"
}
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"version": "1.54.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
"integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
"integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
"mime-db": "^1.54.0"
},
"engines": {
"node": ">= 0.6"
"node": ">=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/mimic-function": {
@@ -9850,9 +9754,9 @@
"license": "MIT"
},
"node_modules/negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
"integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -10001,7 +9905,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
"license": "ISC",
"dependencies": {
"wrappy": "1"
@@ -10200,10 +10103,14 @@
}
},
"node_modules/path-to-regexp": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
"license": "MIT"
"version": "8.4.1",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.1.tgz",
"integrity": "sha512-fvU78fIjZ+SBM9YwCknCvKOUKkLVqtWDVctl0s7xIqfmfb38t2TT4ZU2gHm+Z8xGwgW+QWEU3oQSAzIbo89Ggw==",
"license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/pathe": {
"version": "0.2.0",
@@ -10573,9 +10480,9 @@
}
},
"node_modules/qs": {
"version": "6.14.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
"integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
"version": "6.15.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz",
"integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==",
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.1.0"
@@ -10618,61 +10525,36 @@
}
},
"node_modules/raw-body": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
"integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",
"integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",
"license": "MIT",
"dependencies": {
"bytes": "~3.1.2",
"http-errors": "~2.0.1",
"iconv-lite": "~0.4.24",
"iconv-lite": "~0.7.0",
"unpipe": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
"node": ">= 0.10"
}
},
"node_modules/raw-body/node_modules/http-errors": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
"integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
"node_modules/raw-body/node_modules/iconv-lite": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
"integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
"license": "MIT",
"dependencies": {
"depd": "~2.0.0",
"inherits": "~2.0.4",
"setprototypeof": "~1.2.0",
"statuses": "~2.0.2",
"toidentifier": "~1.0.1"
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">= 0.8"
"node": ">=0.10.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/raw-body/node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/raw-body/node_modules/statuses": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
"integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
@@ -10871,6 +10753,22 @@
"fsevents": "~2.3.2"
}
},
"node_modules/router": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
"integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
"license": "MIT",
"dependencies": {
"debug": "^4.4.0",
"depd": "^2.0.0",
"is-promise": "^4.0.0",
"parseurl": "^1.3.3",
"path-to-regexp": "^8.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -11002,66 +10900,48 @@
"license": "MIT"
},
"node_modules/send": {
"version": "0.19.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
"integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz",
"integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==",
"license": "MIT",
"dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"mime": "1.6.0",
"ms": "2.1.3",
"on-finished": "2.4.1",
"range-parser": "~1.2.1",
"statuses": "2.0.1"
"debug": "^4.4.3",
"encodeurl": "^2.0.0",
"escape-html": "^1.0.3",
"etag": "^1.8.1",
"fresh": "^2.0.0",
"http-errors": "^2.0.1",
"mime-types": "^3.0.2",
"ms": "^2.1.3",
"on-finished": "^2.4.1",
"range-parser": "^1.2.1",
"statuses": "^2.0.2"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/send/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/send/node_modules/debug/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
},
"node_modules/send/node_modules/encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
"node": ">= 18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/serve-static": {
"version": "1.16.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
"integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz",
"integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==",
"license": "MIT",
"dependencies": {
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.19.0"
"encodeurl": "^2.0.0",
"escape-html": "^1.0.3",
"parseurl": "^1.3.3",
"send": "^1.2.0"
},
"engines": {
"node": ">= 0.8.0"
"node": ">= 18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/setprototypeof": {
@@ -11393,9 +11273,9 @@
"license": "MIT"
},
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
"integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
@@ -12006,13 +11886,14 @@
}
},
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
"integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
"license": "MIT",
"dependencies": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
"content-type": "^1.0.5",
"media-typer": "^1.1.0",
"mime-types": "^3.0.0"
},
"engines": {
"node": ">= 0.6"
@@ -12126,15 +12007,6 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"license": "MIT"
},
"node_modules/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
"license": "MIT",
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/uuid": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
@@ -12164,9 +12036,9 @@
}
},
"node_modules/vite": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz",
"integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==",
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz",
"integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13195,7 +13067,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"dev": true,
"license": "ISC"
},
"node_modules/ws": {
+3 -3
View File
@@ -36,7 +36,7 @@
"@types/benchmark": "^2.1.5",
"@types/chai": "^4.3.17",
"@types/d3": "^7.4.3",
"@types/express": "^4.17.23",
"@types/express": "^5.0.6",
"@types/google-protobuf": "^3.15.12",
"@types/hammerjs": "^2.0.46",
"@types/howler": "^2.2.12",
@@ -81,7 +81,7 @@
"tsconfig-paths": "^4.2.0",
"typescript": "^5.7.2",
"typescript-eslint": "^8.26.0",
"vite": "^7.3.0",
"vite": "^7.3.2",
"vite-plugin-html": "^3.2.2",
"vite-plugin-static-copy": "^3.1.4",
"vite-tsconfig-paths": "^6.0.3",
@@ -107,7 +107,7 @@
"dompurify": "^3.3.2",
"dotenv": "^16.5.0",
"ejs": "^3.1.10",
"express": "^4.22.1",
"express": "^5.2.1",
"express-rate-limit": "^7.5.0",
"fastpriorityqueue": "^0.7.5",
"howler": "^2.2.4",
+155
View File
@@ -63,6 +63,11 @@
"continent": "North America",
"name": "Alaska"
},
{
"code": "alberta",
"continent": "North America",
"name": "Alberta"
},
{
"code": "dz",
"continent": "Africa",
@@ -88,6 +93,11 @@
"continent": "Asia",
"name": "Armenia"
},
{
"code": "Armenian SSR",
"continent": "Asia",
"name": "Armenian SSR"
},
{
"code": "Anarchist flag",
"name": "Anarchist Flag"
@@ -191,6 +201,11 @@
"continent": "Asia",
"name": "Azerbaijan"
},
{
"code": "Azerbaijan SSR",
"continent": "Asia",
"name": "Azerbaijan SSR"
},
{
"code": "Aztec Empire",
"continent": "North America",
@@ -294,6 +309,11 @@
"continent": "South America",
"name": "Brazil"
},
{
"code": "britishcolumbia",
"continent": "North America",
"name": "British Columbia"
},
{
"code": "io",
"continent": "Asia",
@@ -339,6 +359,11 @@
"continent": "Africa",
"name": "Burundi"
},
{
"code": "Byelorussian SSR",
"continent": "Europe",
"name": "Byelorussian SSR"
},
{
"code": "Byzantine Empire",
"continent": "Europe",
@@ -418,6 +443,11 @@
"continent": "Africa",
"name": "Chad"
},
{
"code": "Chaldea",
"continent": "Asia",
"name": "Chaldea"
},
{
"code": "cl",
"continent": "South America",
@@ -676,6 +706,11 @@
"continent": "Europe",
"name": "Estonia"
},
{
"code": "Estonian SSR",
"continent": "Europe",
"name": "Estonian SSR"
},
{
"code": "sz",
"continent": "Africa",
@@ -696,6 +731,11 @@
"continent": "South America",
"name": "Falkland Islands"
},
{
"code": "fareasternrepublic",
"continent": "Asia",
"name": "Far Eastern Republic"
},
{
"code": "fo",
"continent": "Europe",
@@ -805,6 +845,11 @@
"continent": "North America",
"name": "Georgia (US State)"
},
{
"code": "Georgian SSR",
"continent": "Asia",
"name": "Georgian SSR"
},
{
"code": "German Empire",
"continent": "Europe",
@@ -1035,6 +1080,16 @@
"continent": "North America",
"name": "Kansas"
},
{
"code": "Karelo-Finnish SSR",
"continent": "Europe",
"name": "Karelo-Finnish SSR"
},
{
"code": "Kazakh SSR",
"continent": "Asia",
"name": "Kazakh SSR"
},
{
"code": "kz",
"continent": "Asia",
@@ -1085,6 +1140,11 @@
"continent": "Asia",
"name": "Kingdom of Judah"
},
{
"code": "Kirghiz SSR",
"continent": "Asia",
"name": "Kirghiz SSR"
},
{
"code": "ki",
"continent": "Oceania",
@@ -1134,6 +1194,11 @@
"continent": "Europe",
"name": "Latvia"
},
{
"code": "Latvian SSR",
"continent": "Europe",
"name": "Latvian SSR"
},
{
"code": "League of Nations",
"name": "League of Nations"
@@ -1191,6 +1256,11 @@
"continent": "Europe",
"name": "Lithuania"
},
{
"code": "Lithuanian SSR",
"continent": "Europe",
"name": "Lithuanian SSR"
},
{
"code": "Louisiana",
"continent": "North America",
@@ -1216,6 +1286,11 @@
"continent": "Europe",
"name": "Macedonia"
},
{
"code": "manitoba",
"continent": "North America",
"name": "Manitoba"
},
{
"code": "mo",
"continent": "Asia",
@@ -1231,6 +1306,11 @@
"continent": "North America",
"name": "Maine"
},
{
"code": "Massachusetts",
"continent": "North America",
"name": "Massachusetts"
},
{
"code": "mw",
"continent": "Africa",
@@ -1331,6 +1411,11 @@
"continent": "North America",
"name": "Missouri"
},
{
"code": "Moldavian SSR",
"continent": "Europe",
"name": "Moldavian SSR"
},
{
"code": "md",
"continent": "Europe",
@@ -1424,11 +1509,21 @@
"continent": "North America",
"name": "Nevada"
},
{
"code": "newbrunswick",
"continent": "North America",
"name": "New Brunswick"
},
{
"code": "nc",
"continent": "Oceania",
"name": "New Caledonia"
},
{
"code": "newfoundlandandlabrador",
"continent": "North America",
"name": "Newfoundland and Labrador"
},
{
"code": "New_Hampshire",
"continent": "North America",
@@ -1529,11 +1624,26 @@
"continent": "Europe",
"name": "Northumbria"
},
{
"code": "northwestterritories",
"continent": "North America",
"name": "Northwest Territories"
},
{
"code": "no",
"continent": "Europe",
"name": "Norway"
},
{
"code": "novascotia",
"continent": "North America",
"name": "Nova Scotia"
},
{
"code": "nunavut",
"continent": "North America",
"name": "Nunavut"
},
{
"code": "1_Occitania",
"continent": "Europe",
@@ -1554,6 +1664,11 @@
"continent": "Asia",
"name": "Oman"
},
{
"code": "ontario",
"continent": "North America",
"name": "Ontario"
},
{
"code": "Oregon",
"continent": "North America",
@@ -1658,6 +1773,11 @@
"continent": "Europe",
"name": "Powys"
},
{
"code": "princeedwardisland",
"continent": "North America",
"name": "Prince Edward Island"
},
{
"code": "provence",
"continent": "Europe",
@@ -1752,6 +1872,11 @@
"continent": "Europe",
"name": "Russia"
},
{
"code": "Russian SSR",
"continent": "Europe",
"name": "Russian SSR"
},
{
"code": "rw",
"continent": "Africa",
@@ -1835,6 +1960,11 @@
"code": "sardines",
"name": "Sardines"
},
{
"code": "saskatchewan",
"continent": "North America",
"name": "Saskatchewan"
},
{
"code": "Sassanid Empire",
"continent": "Asia",
@@ -2059,6 +2189,11 @@
"continent": "Asia",
"name": "Tajikistan"
},
{
"code": "tannutuva",
"continent": "Asia",
"name": "Tannu Tuva"
},
{
"code": "tz",
"continent": "Africa",
@@ -2129,6 +2264,11 @@
"continent": "Asia",
"name": "Türkiye"
},
{
"code": "Turkmen SSR",
"continent": "Asia",
"name": "Turkmen SSR"
},
{
"code": "tm",
"continent": "Asia",
@@ -2164,6 +2304,11 @@
"continent": "Europe",
"name": "Ukraine"
},
{
"code": "Ukrainian SSR",
"continent": "Europe",
"name": "Ukrainian SSR"
},
{
"code": "1_Ulaid",
"continent": "Europe",
@@ -2213,6 +2358,11 @@
"continent": "North America",
"name": "Utah"
},
{
"code": "Uzbek SSR",
"continent": "Asia",
"name": "Uzbek SSR"
},
{
"code": "uz",
"continent": "Asia",
@@ -2332,6 +2482,11 @@
"continent": "Europe",
"name": "Yugoslavia"
},
{
"code": "yukon",
"continent": "North America",
"name": "Yukon"
},
{
"code": "Zaire",
"continent": "Africa",
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 37 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 79 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 24 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 29 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 74 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 32 KiB

+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1200pt" height="1200pt" version="1.1" viewBox="0 0 1200 1200" xmlns="http://www.w3.org/2000/svg">
<path fill="#c2610c" d="m1002 489.61c0-58.828-165.61-123.61-402-123.61-237.61 0-402 64.781-402 123.61 0 57.609 164.39 122.39 402 122.39 236.39 0 402-64.781 402-122.39zm-402 152.39c-178.78 0-366-38.391-417.61-111.61l-62.391 159.61c81.609-14.391 164.39 20.391 211.22 90l43.219-88.781c3.5625-7.2188 11.953-10.828 20.344-7.2188 7.2188 3.6094 10.828 12 7.2188 20.391l-39.609 80.391c78-18 160.78 0 224.39 49.219v-100.78c0-8.3906 7.2188-14.391 14.391-14.391 7.2188 0 14.391 7.2188 14.391 14.391l0.046875 100.78c63.609-49.219 146.39-67.219 224.39-49.219l-39.609-81.609c-3.6094-7.2188-1.2188-15.609 7.2188-20.391 7.2188-3.6094 15.609-1.2188 20.391 7.2188l43.219 87.609c46.781-68.391 128.39-103.22 210-88.781l-62.391-159.61c-52.828 74.391-241.22 112.78-418.82 112.78z"/>
</svg>

After

Width:  |  Height:  |  Size: 918 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.4 KiB

+35 -6
View File
@@ -201,6 +201,7 @@
"infinite_troops": "Infinite troops",
"compact_map": "Compact Map",
"disable_alliances": "Disable alliances",
"water_nukes": "Water nukes",
"max_timer": "Game length (minutes)",
"max_timer_placeholder": "Mins",
"max_timer_invalid": "Please enter a valid max timer value (1-120 minutes)",
@@ -353,7 +354,12 @@
"sanfrancisco": "San Francisco",
"aegean": "Aegean",
"milkyway": "Milky Way",
"mediterranean": "Mediterranean"
"mediterranean": "Mediterranean",
"dyslexdria": "Dyslexdria",
"greatlakes": "Great Lakes",
"straitofmalacca": "Strait Of Malacca",
"luna": "Luna",
"conakry": "Conakry"
},
"map_categories": {
"featured": "Featured",
@@ -432,6 +438,7 @@
"donate_troops": "Donate troops",
"compact_map": "Compact Map",
"disable_alliances": "Disable alliances",
"water_nukes": "Water nukes",
"enables_title": "Enable Settings",
"player": "Player",
"players": "Players",
@@ -511,7 +518,9 @@
"sams_disabled": "SAMs Disabled",
"sams_disabled_label": "SAMs",
"peace_time": "4min Peace",
"peace_time_label": "PVP Immunity"
"peace_time_label": "PVP Immunity",
"water_nukes": "Water Nukes",
"water_nukes_label": "Water Nukes"
},
"select_lang": {
"title": "Select Language"
@@ -609,7 +618,7 @@
"attack_ratio_down": "Decrease Attack Ratio",
"attack_ratio_down_desc": "Decrease attack ratio by {amount}%",
"attack_ratio_increment_label": "Attack Ratio Keybind Increment",
"attack_ratio_increment_desc": "How much the attack ratio keybinds change per press.",
"attack_ratio_increment_desc": "How much the attack ratio keybinds change per press/scroll.",
"attack_keybinds": "Attack Keybinds",
"boat_attack": "Boat Attack",
"boat_attack_desc": "Send a boat attack to the tile under your cursor.",
@@ -935,8 +944,11 @@
"title": "Store",
"patterns": "Skins",
"flags": "Flags",
"packs": "Packs",
"no_flags": "No flags available. Check back later for new items.",
"no_skins": "No skins available. Check back later for new items."
"no_skins": "No skins available. Check back later for new items.",
"no_packs": "No packs available. Check back later for new items.",
"currency_pack_purchase_success": "Currency pack purchase successful!"
},
"territory_patterns": {
"title": "Skins",
@@ -945,10 +957,20 @@
"default": "Default"
},
"select_skin": "Select Skin",
"selected": "selected"
"selected": "selected",
"search": "Search..."
},
"cosmetics": {
"artist_label": "Artist:"
"artist_label": "Artist:",
"color_label": "Color:",
"common": "Common",
"uncommon": "Uncommon",
"rare": "Rare",
"epic": "Epic",
"legendary": "Legendary",
"adfree": "ad-free for life!",
"hard": "Plutonium",
"soft": "Caps"
},
"flag_input": {
"title": "Select Flag",
@@ -1033,5 +1055,12 @@
"description": "(ALPHA)",
"login_required": "Login to play ranked!",
"must_login": "You must be logged in to play ranked matchmaking."
},
"news_box": {
"tournament": "TOURNAMENT",
"tutorial": "TUTORIAL",
"news": "NEWS",
"dismiss": "Dismiss",
"go_to_item": "Go to item {num}"
}
}
+120
View File
@@ -0,0 +1,120 @@
{
"map": {
"height": 1000,
"num_land_tiles": 1108371,
"width": 2456
},
"map16x": {
"height": 250,
"num_land_tiles": 65998,
"width": 614
},
"map4x": {
"height": 500,
"num_land_tiles": 272631,
"width": 1228
},
"name": "Conakry",
"nations": [
{
"coordinates": [510, 420],
"flag": "gn",
"name": "Koba-Tatema"
},
{
"coordinates": [680, 150],
"flag": "gn",
"name": "Kenende"
},
{
"coordinates": [1170, 30],
"flag": "gn",
"name": "Dubreka"
},
{
"coordinates": [1280, 280],
"flag": "gn",
"name": "Tamouta"
},
{
"coordinates": [1320, 550],
"flag": "gn",
"name": "Ratoma"
},
{
"coordinates": [1350, 40],
"flag": "gn",
"name": "Coyah"
},
{
"coordinates": [1630, 160],
"flag": "gn",
"name": "Maferenya"
},
{
"coordinates": [1730, 460],
"flag": "gn",
"name": "Kaback"
},
{
"coordinates": [2130, 80],
"flag": "gn",
"name": "Forecariah"
},
{
"coordinates": [2280, 440],
"flag": "gn",
"name": "Laya"
},
{
"coordinates": [1200, 910],
"flag": "gn",
"name": "Fotoba"
},
{
"coordinates": [1333, 835],
"flag": "gn",
"name": "Ilot Cabri"
},
{
"coordinates": [716, 260],
"flag": "gn",
"name": "Bolonta"
},
{
"coordinates": [870, 370],
"flag": "gn",
"name": "Kanka"
},
{
"coordinates": [940, 115],
"flag": "gn",
"name": "Mangueya"
},
{
"coordinates": [1975, 475],
"flag": "gn",
"name": "Yelibane"
},
{
"coordinates": [1900, 115],
"flag": "gn",
"name": "Dandaya"
},
{
"coordinates": [80, 480],
"flag": "gn",
"name": "Marara"
},
{
"coordinates": [390, 210],
"flag": "gn",
"name": "Boufou"
},
{
"coordinates": [180, 130],
"flag": "gn",
"name": "Dioumaya"
}
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

+350
View File
@@ -0,0 +1,350 @@
{
"map": {
"height": 1344,
"num_land_tiles": 1895783,
"width": 3080
},
"map16x": {
"height": 336,
"num_land_tiles": 108613,
"width": 770
},
"map4x": {
"height": 672,
"num_land_tiles": 459895,
"width": 1540
},
"name": "Dyslexdria",
"nations": [
{
"coordinates": [2260, 400],
"flag": "west_germany",
"name": "Jermaine"
},
{
"coordinates": [2111, 399],
"flag": "fr",
"name": "Pants"
},
{
"coordinates": [2050, 460],
"flag": "Fascist Spain",
"name": "Splain"
},
{
"coordinates": [2200, 470],
"flag": "it",
"name": "Idoly"
},
{
"coordinates": [980, 375],
"flag": "gb",
"name": "Graet Brian"
},
{
"coordinates": [2265, 510],
"flag": "gr",
"name": "Grace"
},
{
"coordinates": [2342, 436],
"flag": "Communist Romania",
"name": "Rollandia"
},
{
"coordinates": [1222, 310],
"flag": "Ukrainian SSR",
"name": "Ucryin"
},
{
"coordinates": [2235, 290],
"flag": "se",
"name": "Veden"
},
{
"coordinates": [2190, 250],
"flag": "no",
"name": "Morvay"
},
{
"coordinates": [2330, 280],
"flag": "fi",
"name": "Binland"
},
{
"coordinates": [1280, 285],
"flag": "Russian SSR",
"name": "Rusha"
},
{
"coordinates": [2555, 475],
"flag": "Georgian SSR",
"name": "Georgia"
},
{
"coordinates": [1105, 620],
"flag": "Second Republic of Iraq",
"name": "Irap"
},
{
"coordinates": [1370, 670],
"flag": "ae",
"name": "United Bara Estimates"
},
{
"coordinates": [356, 980],
"flag": "Pahlavi Iran",
"name": "Iram"
},
{
"coordinates": [2630, 740],
"flag": "pk",
"name": "Plackitstan"
},
{
"coordinates": [2650, 640],
"flag": "af",
"name": "Agraphistan"
},
{
"coordinates": [1260, 400],
"flag": "Kazakh SSR",
"name": "Azakah"
},
{
"coordinates": [1430, 390],
"flag": "Zheleznogorsk",
"name": "Zheleznogzorzkz"
},
{
"coordinates": [50, 450],
"flag": "Siberia",
"name": "Shiberia"
},
{
"coordinates": [2690, 950],
"flag": "in",
"name": "Indiana"
},
{
"coordinates": [295, 1325],
"flag": "is",
"name": "Ikeland"
},
{
"coordinates": [2020, 900],
"flag": "bd",
"name": "Bangledash"
},
{
"coordinates": [1085, 885],
"flag": "cn",
"name": "Jina"
},
{
"coordinates": [65, 795],
"flag": "kp",
"name": "West Cornea"
},
{
"coordinates": [80, 805],
"flag": "kr",
"name": "East Cornea"
},
{
"coordinates": [2890, 300],
"flag": "jp",
"name": "Chapan"
},
{
"coordinates": [2900, 650],
"flag": "mn",
"name": "Mongoalina"
},
{
"coordinates": [2385, 1070],
"flag": "id",
"name": "Endonisia"
},
{
"coordinates": [880, 950],
"flag": "vn",
"name": "North Vitamen"
},
{
"coordinates": [856, 996],
"flag": "South Vietnam",
"name": "South Vitamen"
},
{
"coordinates": [120, 945],
"flag": "pg",
"name": "Papa No Guine"
},
{
"coordinates": [785, 615],
"flag": "au",
"name": "Austria"
},
{
"coordinates": [335, 400],
"flag": "nz",
"name": "New Sealand"
},
{
"coordinates": [360, 70],
"flag": "an_pe",
"name": "Amtarctica"
},
{
"coordinates": [100, 70],
"flag": "sardines",
"name": "Dophlin Confeteracy"
},
{
"coordinates": [2555, 50],
"flag": "aq",
"name": "Arctica"
},
{
"coordinates": [1950, 1305],
"flag": "santa_claus",
"name": "Nort Pole"
},
{
"coordinates": [1020, 490],
"flag": "ly",
"name": "Lidya"
},
{
"coordinates": [380, 855],
"flag": "dz",
"name": "Alberia"
},
{
"coordinates": [1215, 790],
"flag": "so",
"name": "Slomia"
},
{
"coordinates": [550, 770],
"flag": "Mauritania",
"name": "Manchurian"
},
{
"coordinates": [1735, 860],
"flag": "ne",
"name": "Nigel"
},
{
"coordinates": [630, 825],
"flag": "lr",
"name": "Libraria"
},
{
"coordinates": [2970, 735],
"flag": "cf",
"name": "Center Africa"
},
{
"coordinates": [2950, 1150],
"flag": "Apartheid South Africa",
"name": "Southern African State"
},
{
"coordinates": [1620, 670],
"flag": "mg",
"name": "Madalplascar"
},
{
"coordinates": [2860, 1050],
"flag": "Apartheid South Africa",
"name": "Southern South West Africa"
},
{
"coordinates": [1400, 500],
"flag": "br",
"name": "Brailzil"
},
{
"coordinates": [1480, 865],
"flag": "Cthulhu Republic",
"name": "Anazom Warehouse"
},
{
"coordinates": [1620, 230],
"flag": "ar",
"name": "Aregano"
},
{
"coordinates": [1750, 600],
"flag": "cl",
"name": "Philly"
},
{
"coordinates": [1150, 400],
"flag": "ve",
"name": "Venice"
},
{
"coordinates": [2060, 900],
"flag": "ni",
"name": "Nicargo"
},
{
"coordinates": [1910, 440],
"flag": "mx",
"name": "Xico"
},
{
"coordinates": [2170, 600],
"flag": "us",
"name": "Untitled States"
},
{
"coordinates": [1960, 530],
"flag": "Texas",
"name": "Taxes"
},
{
"coordinates": [2860, 400],
"flag": "California",
"name": "Calizonia"
},
{
"coordinates": [2300, 765],
"flag": "Newfoundland",
"name": "Foundland"
},
{
"coordinates": [2020, 750],
"flag": "ca",
"name": "Canananada"
},
{
"coordinates": [1440, 1000],
"flag": "Alaska",
"name": "Eleske"
},
{
"coordinates": [484, 256],
"flag": "Yukon",
"name": "Yukant"
},
{
"coordinates": [500, 1200],
"flag": "gl",
"name": "Greedland"
},
{
"coordinates": [1515, 1313],
"flag": "polar_bears",
"name": "Bearguin Aliance"
},
{
"coordinates": [3060, 100],
"flag": "Republic of Pirates",
"name": "Biosphere Conmune"
}
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

+60 -55
View File
@@ -1,265 +1,270 @@
{
"map": {
"height": 1672,
"num_land_tiles": 2311229,
"width": 2348
"num_land_tiles": 2345907,
"width": 2904
},
"map16x": {
"height": 418,
"num_land_tiles": 132857,
"width": 587
"num_land_tiles": 134783,
"width": 726
},
"map4x": {
"height": 836,
"num_land_tiles": 561490,
"width": 1174
"num_land_tiles": 569606,
"width": 1452
},
"name": "Europe",
"nations": [
{
"coordinates": [148, 744],
"coordinates": [634, 781],
"flag": "ie",
"name": "Republic of Ireland"
},
{
"coordinates": [451, 785],
"coordinates": [962, 780],
"flag": "gb-eng",
"name": "England"
},
{
"coordinates": [285, 1253],
"coordinates": [935, 1289],
"flag": "es",
"name": "Kingdom of Spain"
},
{
"coordinates": [527, 979],
"coordinates": [1087, 931],
"flag": "fr",
"name": "French Republic"
},
{
"coordinates": [974, 1159],
"coordinates": [1541, 1180],
"flag": "it",
"name": "Italian Republic"
},
{
"coordinates": [761, 1013],
"coordinates": [1339, 983],
"flag": "ch",
"name": "Swiss Confederation"
},
{
"coordinates": [789, 451],
"coordinates": [1360, 428],
"flag": "no",
"name": "Kingdom of Norway"
},
{
"coordinates": [1034, 562],
"coordinates": [1605, 573],
"flag": "se",
"name": "Kingdom of Sweden"
},
{
"coordinates": [1368, 369],
"coordinates": [2007, 309],
"flag": "fi",
"name": "Republic of Finland"
},
{
"coordinates": [633, 802],
"coordinates": [1200, 830],
"flag": "be",
"name": "Kingdom of Belgium"
},
{
"coordinates": [647, 754],
"coordinates": [1264, 752],
"flag": "nl",
"name": "Kingdom of the Netherlands"
},
{
"coordinates": [904, 805],
"coordinates": [1443, 798],
"flag": "de",
"name": "Federal Republic of Germany"
},
{
"coordinates": [1082, 953],
"coordinates": [1444, 969],
"flag": "at",
"name": "Republic of Austria"
},
{
"coordinates": [1274, 739],
"coordinates": [1850, 810],
"flag": "pl",
"name": "Republic of Poland"
},
{
"coordinates": [1098, 872],
"coordinates": [1630, 909],
"flag": "cz",
"name": "Czech Republic"
},
{
"coordinates": [1802, 933],
"coordinates": [2342, 936],
"flag": "ua",
"name": "Ukraine"
},
{
"coordinates": [1562, 730],
"coordinates": [2167, 708],
"flag": "by",
"name": "Republic of Belarus"
},
{
"coordinates": [1533, 1039],
"coordinates": [2046, 990],
"flag": "ro",
"name": "Romania"
},
{
"coordinates": [1770, 1304],
"coordinates": [2432, 1265],
"flag": "tr",
"name": "Republic of Turkiye"
},
{
"coordinates": [180, 1525],
"coordinates": [769, 1535],
"flag": "ma",
"name": "Kingdom of Morocco"
},
{
"coordinates": [2069, 659],
"coordinates": [2535, 720],
"flag": "ru",
"name": "Russian Federation"
},
{
"coordinates": [1952, 1433],
"coordinates": [2539, 1455],
"flag": "sy",
"name": "Syrian Arab Republic"
},
{
"coordinates": [2264, 1529],
"coordinates": [2689, 1441],
"flag": "iq",
"name": "Republic of Iraq"
},
{
"coordinates": [2173, 1173],
"coordinates": [2748, 1138],
"flag": "ge",
"name": "Georgia"
},
{
"coordinates": [832, 1434],
"coordinates": [1389, 1473],
"flag": "tn",
"name": "Republic of Tunisia"
},
{
"coordinates": [517, 1483],
"coordinates": [1066, 1506],
"flag": "dz",
"name": "Algeria"
},
{
"coordinates": [89, 1292],
"coordinates": [680, 1254],
"flag": "pt",
"name": "Portuguese Republic"
},
{
"coordinates": [1335, 1312],
"coordinates": [1891, 1299],
"flag": "gr",
"name": "Hellenic Republic"
},
{
"coordinates": [1312, 1133],
"coordinates": [1906, 1113],
"flag": "rs",
"name": "Republic of Serbia"
},
{
"coordinates": [1281, 999],
"coordinates": [1751, 983],
"flag": "hu",
"name": "Republic of Hungary"
},
{
"coordinates": [1254, 899],
"coordinates": [1784, 908],
"flag": "sk",
"name": "Slovak Republic"
},
{
"coordinates": [1002, 1061],
"coordinates": [1624, 1038],
"flag": "hr",
"name": "Republic of Croatia"
},
{
"coordinates": [1174, 1108],
"coordinates": [1734, 1094],
"flag": "ba",
"name": "Bosnia and Herzegovina"
},
{
"coordinates": [1259, 1236],
"coordinates": [1817, 1213],
"flag": "al",
"name": "Republic of Albania"
},
{
"coordinates": [1556, 1200],
"coordinates": [2092, 1158],
"flag": "bg",
"name": "Republic of Bulgaria"
},
{
"coordinates": [1380, 618],
"coordinates": [1939, 702],
"flag": "lt",
"name": "Republic of Lithuania"
},
{
"coordinates": [1360, 556],
"coordinates": [2014, 618],
"flag": "lv",
"name": "Republic of Latvia"
},
{
"coordinates": [1443, 502],
"coordinates": [2033, 504],
"flag": "ee",
"name": "Republic of Estonia"
},
{
"coordinates": [278, 742],
"coordinates": [863, 775],
"flag": "gb-wls",
"name": "Wales"
},
{
"coordinates": [296, 601],
"coordinates": [863, 573],
"flag": "gb-sct",
"name": "Scotland"
},
{
"coordinates": [2300, 510],
"coordinates": [2688, 427],
"flag": "ussr",
"name": "USSR"
},
{
"coordinates": [204, 667],
"coordinates": [719, 685],
"flag": "northern_ireland",
"name": "Northern Ireland"
},
{
"coordinates": [1522, 48],
"coordinates": [2011, 103],
"flag": "polar_bears",
"name": "Polar Bears"
},
{
"coordinates": [821, 628],
"coordinates": [1369, 628],
"flag": "dk",
"name": "Kingdom of Denmark"
},
{
"coordinates": [1875, 1599],
"coordinates": [2406, 1638],
"flag": "il",
"name": "State of Israel"
},
{
"coordinates": [1691, 1667],
"coordinates": [2226, 1661],
"flag": "eg",
"name": "Arab Republic of Egypt"
},
{
"coordinates": [1115, 1650],
"coordinates": [1847, 1652],
"flag": "ly",
"name": "State of Libya"
},
{
"coordinates": [1919, 1608],
"coordinates": [2571, 1601],
"flag": "jo",
"name": "Hashemite Kingdom of Jordan"
},
{
"coordinates": [1898, 1535],
"coordinates": [2473, 1528],
"flag": "lb",
"name": "Lebanese Republic"
},
{
"coordinates": [254, 274],
"flag": "is",
"name": "Iceland"
}
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

+190
View File
@@ -0,0 +1,190 @@
{
"map": {
"height": 1300,
"num_land_tiles": 1937747,
"width": 2000
},
"map16x": {
"height": 325,
"num_land_tiles": 117039,
"width": 500
},
"map4x": {
"height": 650,
"num_land_tiles": 478743,
"width": 1000
},
"name": "greatlakes",
"nations": [
{
"coordinates": [38, 326],
"flag": "Minnesota",
"name": "Duluth"
},
{
"coordinates": [325, 135],
"flag": "ca",
"name": "Thunder Bay"
},
{
"coordinates": [776, 36],
"flag": "ca",
"name": "Marathon"
},
{
"coordinates": [965, 154],
"flag": "ca",
"name": "Wawa"
},
{
"coordinates": [979, 411],
"flag": "ca",
"name": "Sault Ste. Marie"
},
{
"coordinates": [1506, 580],
"flag": "ca",
"name": "Parry Sound"
},
{
"coordinates": [534, 385],
"flag": "Michigan",
"name": "Marquette"
},
{
"coordinates": [618, 577],
"flag": "Michigan",
"name": "Escanaba"
},
{
"coordinates": [517, 785],
"flag": "Wisconsin",
"name": "Green Bay"
},
{
"coordinates": [497, 1042],
"flag": "Wisconsin",
"name": "Milwaukee"
},
{
"coordinates": [576, 1287],
"flag": "Illinois",
"name": "Chicago"
},
{
"coordinates": [765, 1002],
"flag": "Michigan",
"name": "Muskegon"
},
{
"coordinates": [714, 1276],
"flag": "Indiana",
"name": "Gary"
},
{
"coordinates": [1049, 667],
"flag": "Michigan",
"name": "Alpena"
},
{
"coordinates": [1923, 771],
"flag": "ca",
"name": "Kingston"
},
{
"coordinates": [1934, 999],
"flag": "New_York",
"name": "Rochester"
},
{
"coordinates": [1681, 1053],
"flag": "New_York",
"name": "Buffalo"
},
{
"coordinates": [1602, 881],
"flag": "ca",
"name": "Toronto"
},
{
"coordinates": [1120, 1098],
"flag": "Michigan",
"name": "Detroit"
},
{
"coordinates": [1004, 937],
"flag": "Michigan",
"name": "Saginaw"
},
{
"coordinates": [1111, 1276],
"flag": "Ohio",
"name": "Toledo"
},
{
"coordinates": [1365, 1276],
"flag": "Ohio",
"name": "Cleveland"
},
{
"coordinates": [1545, 1199],
"flag": "Pennsylvania",
"name": "Erie"
},
{
"coordinates": [1342, 906],
"flag": "ca",
"name": "Goderich"
},
{
"coordinates": [1247, 1098],
"flag": "ca",
"name": "Windsor"
},
{
"coordinates": [1962, 563],
"flag": "ca",
"name": "Ottawa"
},
{
"coordinates": [246, 1056],
"flag": "Wisconsin",
"name": "Madison"
},
{
"coordinates": [244, 447],
"flag": "Wisconsin",
"name": "Ashland"
},
{
"coordinates": [246, 687],
"flag": "Wisconsin",
"name": "Wausau"
},
{
"coordinates": [153, 1259],
"flag": "Iowa",
"name": "Davenport"
},
{
"coordinates": [1568, 368],
"flag": "ca",
"name": "North Bay"
},
{
"coordinates": [1311, 120],
"flag": "ca",
"name": "Timmins"
},
{
"coordinates": [925, 1118],
"flag": "Michigan",
"name": "Lansing"
},
{
"coordinates": [1662, 80],
"flag": "ca",
"name": "Rouyn-Noranda"
}
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

+145
View File
@@ -0,0 +1,145 @@
{
"map": {
"height": 3500,
"num_land_tiles": 1625125,
"width": 1308
},
"map16x": {
"height": 875,
"num_land_tiles": 92808,
"width": 327
},
"map4x": {
"height": 1750,
"num_land_tiles": 392778,
"width": 654
},
"name": "Luna",
"nations": [
{
"coordinates": [265, 662],
"flag": "us",
"name": "Apollo 12"
},
{
"coordinates": [550, 600],
"flag": "us",
"name": "Apollo 14"
},
{
"coordinates": [780, 345],
"flag": "us",
"name": "Apollo 15"
},
{
"coordinates": [825, 735],
"flag": "us",
"name": "Apollo 11"
},
{
"coordinates": [875, 990],
"flag": "us",
"name": "Apollo 16"
},
{
"coordinates": [1160, 490],
"flag": "us",
"name": "Apollo 17"
},
{
"coordinates": [1160, 2850],
"flag": "us",
"name": "Surveyor 3"
},
{
"coordinates": [256, 148],
"flag": "us",
"name": "Apollo 13"
},
{
"coordinates": [650, 1750],
"flag": "us",
"name": "Artemis II"
},
{
"coordinates": [510, 170],
"flag": "Russian SSR",
"name": "Luna 17"
},
{
"coordinates": [1050, 385],
"flag": "Russian SSR",
"name": "Luna 21"
},
{
"coordinates": [1030, 790],
"flag": "Russian SSR",
"name": "Luna 16"
},
{
"coordinates": [1090, 2640],
"flag": "Russian SSR",
"name": "Luna 9"
},
{
"coordinates": [130, 2890],
"flag": "Russian SSR",
"name": "Luna 24"
},
{
"coordinates": [310, 1167],
"flag": "Russian SSR",
"name": "Luna 25"
},
{
"coordinates": [1043, 2393],
"flag": "Russian SSR",
"name": "Luna 1"
},
{
"coordinates": [672, 2323],
"flag": "cn",
"name": "Chang'e 3"
},
{
"coordinates": [650, 2750],
"flag": "cn",
"name": "Chang'e 4"
},
{
"coordinates": [270, 2690],
"flag": "cn",
"name": "Chang'e 5"
},
{
"coordinates": [910, 3190],
"flag": "cn",
"name": "Chang'e 6"
},
{
"coordinates": [830, 735],
"flag": "jp",
"name": "S.L.I.M."
},
{
"coordinates": [400, 3360],
"flag": "in",
"name": "Chandrayaan 3"
},
{
"coordinates": [732, 3490],
"flag": "in",
"name": "Chandrayaan 1"
},
{
"coordinates": [755, 3035],
"flag": "",
"name": "T▅▚░S▅cr▅▟░M▅l▅t▅r▅░B▅s▅"
},
{
"coordinates": [628, 921],
"flag": "",
"name": "[]"
}
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

@@ -0,0 +1,65 @@
{
"map": {
"height": 1644,
"num_land_tiles": 867389,
"width": 1832
},
"map16x": {
"height": 411,
"num_land_tiles": 51062,
"width": 458
},
"map4x": {
"height": 822,
"num_land_tiles": 212395,
"width": 916
},
"name": "straitofmalacca",
"nations": [
{
"coordinates": [1268, 730],
"flag": "sg",
"name": "Singapore"
},
{
"coordinates": [862, 41],
"flag": "th",
"name": "Thailand"
},
{
"coordinates": [1328, 1284],
"flag": "id",
"name": "Sumatra"
},
{
"coordinates": [1141, 1090],
"flag": "mm",
"name": "Burmese Pythons"
},
{
"coordinates": [210, 243],
"flag": "id",
"name": "Aceh"
},
{
"coordinates": [1011, 736],
"flag": "id",
"name": "Riau"
},
{
"coordinates": [600, 565],
"flag": "id",
"name": "Samosir"
},
{
"coordinates": [827, 999],
"flag": "id",
"name": "Barisan"
},
{
"coordinates": [1053, 333],
"flag": "my",
"name": "Malaysia"
}
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

+23
View File
@@ -0,0 +1,23 @@
[
{
"id": "clan-tournament-spring-2026",
"title": "Upcoming: Spring Clan Tournament",
"description": "2v2 clan battles — Sign up on Discord before April 12",
"url": "https://discord.gg/openfront",
"type": "tournament"
},
{
"id": "clan-tournaments-2026",
"title": "Clan Tournaments",
"description": "Join a clan and compete in weekly tournaments on Discord!",
"url": "https://discord.gg/openfront",
"type": "tournament"
},
{
"id": "tutorial-2026",
"title": "New Player Tutorial",
"description": "Learn the basics of OpenFront in this video guide",
"url": "https://www.youtube.com/watch?v=EN2oOog3pSs",
"type": "tutorial"
}
]
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More