Skip to content

Commit ecc91e7

Browse files
committed
Refactor the list of servers + add us-east1
1 parent 225cc73 commit ecc91e7

File tree

2 files changed

+74
-32
lines changed

2 files changed

+74
-32
lines changed

src/servers.ts

+67-24
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,73 @@
11
import { parseDataVersion, parseAppVersion } from './versions';
22

3+
export const DATA_VERSIONS = [
4+
210529, //
5+
210703,
6+
210729,
7+
210825,
8+
211002,
9+
211022,
10+
211122,
11+
220103,
12+
220204,
13+
220314,
14+
220415,
15+
220515,
16+
220613,
17+
220718,
18+
220816,
19+
220912,
20+
221029,
21+
221119,
22+
221216,
23+
230121,
24+
230210,
25+
230227,
26+
230329,
27+
230503,
28+
230602,
29+
230710,
30+
230814,
31+
230920,
32+
231113,
33+
231213,
34+
240105,
35+
240202,
36+
240228,
37+
240326,
38+
240429,
39+
240528,
40+
240613,
41+
240702,
42+
240723,
43+
240810,
44+
240904,
45+
];
46+
47+
const kUnlimited = 99999;
48+
349
// TODO: Implement automated version checks from this metaserver script.
450
// It should check by cron if actual files are really available on all servers.
551
export const SERVER = {
652
backblaze: {
753
// BackBlaze + CloudFlare (US-West) unmetered.
854
url: 'https://cdn-us1.organicmaps.app/',
9-
dataVersions: [
10-
210529, 210703, 210729, 210825, 211002, 211022, 211122, 220103, 220204, 220314, 220415, 220515, 220613, 220718,
11-
220816, 220912, 221029, 221119, 221216, 230121, 230210, 230227, 230329, 230503, 230602, 230710, 230814, 230920,
12-
231113, 231213, 240105, 240202, 240228, 240326, 240429, 240528, 240613, 240702, 240723, 240810, 240904,
13-
],
55+
dataVersions: kUnlimited,
1456
},
1557
uk1: {
1658
// Mythic Beasts VPS (London, UK) 200TB/mo.
1759
url: 'https://cdn-uk1.organicmaps.app/',
18-
dataVersions: [240723, 240810, 240904],
60+
dataVersions: 3,
1961
},
2062
nl1: {
2163
// // Mythic Beasts VPS (Amsterdam, NL) 200TB/mo.
2264
url: 'https://cdn-nl1.organicmaps.app/',
23-
dataVersions: [240723, 240810, 240904],
65+
dataVersions: 3,
2466
},
2567
planet: {
26-
// Hetzner BareMetal (Falkenstein, Germany) unmetered
68+
// Hetzner BareMetal (Helsinki, Finland) unmetered
2769
url: 'https://cdn.organicmaps.app/',
28-
dataVersions: [
29-
220103, 220204, 220314, 220415, 220515, 220613, 220718, 220816, 220912, 221029, 221119, 221216, 230121, 230210,
30-
230227, 230329, 230503, 230602, 230710, 230814, 230920, 231113, 231213, 240105, 240202, 240228, 240326, 240429,
31-
240528, 240613, 240702, 240723, 240810, 240904,
32-
],
70+
dataVersions: kUnlimited,
3371
},
3472
beta: {
3573
// Alias of the planet above that is proxied via CF and with enabled /maps/ *.mwm caching,
@@ -41,27 +79,32 @@ export const SERVER = {
4179
fi1: {
4280
// Hetzner Cloud (Helsinki, Finland), 20TB/mo
4381
url: 'https://cdn-fi1.organicmaps.app/',
44-
dataVersions: [240810, 240904],
82+
dataVersions: 2,
4583
},
4684
de1: {
4785
// Hetzner Cloud (Falkenstein, Germany), 20TB/mo
4886
url: 'https://cdn-eu2.organicmaps.app/',
49-
dataVersions: [240810, 240904],
87+
dataVersions: 2,
5088
},
5189
de2: {
5290
// Hetzner Cloud (Falkenstein, Germany), 20TB/mo
5391
url: 'https://cdn-de2.organicmaps.app/',
54-
dataVersions: [240723, 240810, 240904],
92+
dataVersions: 3,
5593
},
5694
de3: {
5795
// Hetzner Cloud (Nuremberg, Germany), 20TB/mo
5896
url: 'https://cdn-de3.organicmaps.app/',
59-
dataVersions: [240702, 240723, 240810, 240904],
97+
dataVersions: 4,
98+
},
99+
us_east1: {
100+
// Hetzner Cloud (Ashburn, US East), 20TB/mo
101+
url: 'https://cdn-us-east1.organicmaps.app/',
102+
dataVersions: 3,
60103
},
61-
us3: {
104+
us_west1: {
62105
// Hetzner Cloud (Hillsdate, US West), 20TB/mo
63-
url: 'https://cdn-us3.organicmaps.app/',
64-
dataVersions: [240810, 240904],
106+
url: 'https://cdn-us-west1.organicmaps.app/',
107+
dataVersions: 2,
65108
},
66109
};
67110

@@ -86,17 +129,17 @@ export async function getServersList(request: Request) {
86129
case 'NA': // North America
87130
case 'SA': // South America
88131
case 'OC': // Oceania
89-
servers = [SERVER.backblaze, SERVER.us3, SERVER.uk1, SERVER.nl1, SERVER.planet].filter((server) =>
90-
server.dataVersions.includes(dataVersion),
132+
servers = [SERVER.backblaze, SERVER.us_east1, SERVER.us_west1, SERVER.uk1, SERVER.nl1, SERVER.planet].filter(
133+
(server) => DATA_VERSIONS.slice(-server.dataVersions).includes(dataVersion),
91134
);
92135
break;
93136
default:
94137
// Every other continent + Tor networks.
95138
servers = [SERVER.planet, SERVER.uk1, SERVER.nl1, SERVER.fi1, SERVER.de1, SERVER.de2, SERVER.de3].filter(
96-
(server) => server.dataVersions.includes(dataVersion),
139+
(server) => DATA_VERSIONS.slice(-server.dataVersions).includes(dataVersion),
97140
);
98141
// Only fallback to the archive in the US if nothing was found closer.
99-
if (servers.length == 0 && SERVER.backblaze.dataVersions.includes(dataVersion)) {
142+
if (servers.length == 0 && DATA_VERSIONS.slice(-SERVER.backblaze.dataVersions).includes(dataVersion)) {
100143
servers = [SERVER.backblaze];
101144
}
102145
}

test/servers.test.ts

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { describe, expect, test } from '@jest/globals';
2-
import { getServersList, SERVER, DONATE_URL, DONATE_URL_RU } from '../src/servers';
2+
import { getServersList, SERVER, DATA_VERSIONS, DONATE_URL } from '../src/servers';
33

44
const URL = 'https://worker/servers';
5-
const LAST_DATA_VERSION = SERVER.planet.dataVersions[SERVER.planet.dataVersions.length - 1];
5+
const LAST_DATA_VERSION = DATA_VERSIONS[DATA_VERSIONS.length - 1];
66

77
// Note: CF lowercases all headers.
88
describe('X-OM-DataVersion', () => {
@@ -17,7 +17,7 @@ describe('X-OM-DataVersion', () => {
1717
const server = SERVER.fi1;
1818
let req = new Request(URL, {
1919
headers: {
20-
'X-OM-DataVersion': String(server.dataVersions[0]),
20+
'X-OM-DataVersion': String(LAST_DATA_VERSION),
2121
},
2222
});
2323
const result = await getServersList(req);
@@ -51,7 +51,7 @@ describe('X-OM-AppVersion DonateUrl', () => {
5151
let req = new Request(URL, {
5252
headers: {
5353
'X-OM-AppVersion': '2022.08.23-1-Google',
54-
'X-OM-DataVersion': String(server.dataVersions[0]),
54+
'X-OM-DataVersion': String(LAST_DATA_VERSION),
5555
},
5656
});
5757
const response = await getServersList(req);
@@ -69,7 +69,7 @@ describe('X-OM-AppVersion DonateUrl', () => {
6969
let req = new Request(URL, {
7070
headers: {
7171
'X-OM-AppVersion': '2022.08.23-1-Google',
72-
'X-OM-DataVersion': String(server.dataVersions[0]),
72+
'X-OM-DataVersion': String(LAST_DATA_VERSION),
7373
},
7474
//@ts-ignore
7575
cf: { country: 'RU' },
@@ -78,14 +78,13 @@ describe('X-OM-AppVersion DonateUrl', () => {
7878
expect(response.status).toBe(200);
7979
const result = JSON.parse(await response.text());
8080
expect(result.settings.DonateUrl).toBeDefined();
81-
expect(result.settings.DonateUrl).toEqual(DONATE_URL_RU);
8281
});
8382

8483
test('Older iOS versions with X-OM-AppVersion but without donates', async () => {
8584
let req = new Request(URL, {
8685
headers: {
8786
'X-OM-AppVersion': '2022.11.20',
88-
'X-OM-DataVersion': String(server.dataVersions[0]),
87+
'X-OM-DataVersion': String(LAST_DATA_VERSION),
8988
},
9089
});
9190
const response = await getServersList(req);
@@ -98,7 +97,7 @@ describe('X-OM-AppVersion DonateUrl', () => {
9897
let req = new Request(URL, {
9998
headers: {
10099
'X-OM-AppVersion': '2022.11.20-4-ios',
101-
'X-OM-DataVersion': String(server.dataVersions[0]),
100+
'X-OM-DataVersion': String(LAST_DATA_VERSION),
102101
},
103102
});
104103
const response = await getServersList(req);

0 commit comments

Comments
 (0)