69 lines
1.6 KiB
TypeScript
69 lines
1.6 KiB
TypeScript
// Copyright 2024 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import { resolve4 as resolve4Cb, resolve6 as resolve6Cb } from 'dns';
|
|
import { writeFile } from 'fs/promises';
|
|
import { join } from 'path';
|
|
import { promisify } from 'util';
|
|
|
|
import { isNotNil } from '../util/isNotNil';
|
|
|
|
const resolve4 = promisify(resolve4Cb);
|
|
const resolve6 = promisify(resolve6Cb);
|
|
|
|
const FALLBACK_DOMAINS = [
|
|
'chat.signal.org',
|
|
'storage.signal.org',
|
|
'cdsi.signal.org',
|
|
'cdn.signal.org',
|
|
'cdn2.signal.org',
|
|
'cdn3.signal.org',
|
|
'updates2.signal.org',
|
|
'sfu.voip.signal.org',
|
|
];
|
|
|
|
async function main() {
|
|
const config = await Promise.all(
|
|
FALLBACK_DOMAINS.sort().map(async domain => {
|
|
const ipv4endpoints = (await resolve4(domain)).map(a => ({
|
|
family: 'ipv4',
|
|
address: a,
|
|
}));
|
|
|
|
const ipv6endpoints = (await resolve6(domain)).map(a => ({
|
|
family: 'ipv6',
|
|
address: a,
|
|
}));
|
|
|
|
const endpoints = [...ipv4endpoints, ...ipv6endpoints]
|
|
.filter(isNotNil)
|
|
.sort((a, b) => {
|
|
if (a.family < b.family) {
|
|
return -1;
|
|
}
|
|
if (a.family > b.family) {
|
|
return 1;
|
|
}
|
|
|
|
if (a.address < b.address) {
|
|
return -1;
|
|
}
|
|
if (a.address > b.address) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
});
|
|
|
|
return { domain, endpoints };
|
|
})
|
|
);
|
|
|
|
const outPath = join(__dirname, '../../build/dns-fallback.json');
|
|
|
|
await writeFile(outPath, `${JSON.stringify(config, null, 2)}\n`);
|
|
}
|
|
|
|
main().catch(error => {
|
|
console.error(error);
|
|
process.exit(1);
|
|
});
|